我的工作项目用asp.net core 2.1编写了很长时间,但是昨天,我被迫将其升级到.net core 3.0(由于2.1无法调用已经用3.0编写的Dll)。
因此,许多功能已过时或已被删除。我几乎解决了所有问题,但CORS出现了一个问题。
像我之前的许多人一样,我曾经:
app.UseCors(x => x .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials());
在Configure功能上。并services.AddCors()在ConfigureServices功能上。
Configure
services.AddCors()
ConfigureServices
我能与设置固定这很容易WithOrigins()或.SetIsOriginAllowed(_ => true)代替AllowAnyOrigin()不与工作了AllowCredentials()。
WithOrigins()
.SetIsOriginAllowed(_ => true)
AllowAnyOrigin()
AllowCredentials()
在那之后,我能够启动该应用程序,我认为一切都很好,但是直到现在为止,我一直陷在一个我不知道如何解决的问题上。
我有数据库关系N:N和关系表来处理该问题,这意味着我具有Admin具有AdminProject list属性的实体,然后又具有AdminProject具有Admin list和Project list属性的Project实体以及具有AdminProject list属性的实体。
Admin
AdminProject list
AdminProject
Admin list
Project list
Project
当我列出某些管理员的项目时,我将在Controller this中返回return Ok(projects),我只getAll在AdminProject实体上使用,然后Select仅返回项目。
return Ok(projects)
getAll
Select
为此,我必须[JsonIgnore]在project / admin中使用创建json时不需要避免循环的属性。
[JsonIgnore]
这样说: 现在,.NET CORE 3.0和CORS设置不起作用了 。
我收到一个错误: System.Text.Json.JsonException: A possible object cycle was detected which is not supported. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32.
System.Text.Json.JsonException: A possible object cycle was detected which is not supported. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 32.
在控制台中调试时以及Access to XMLHttpRequest at 'http://localhost:5000/api/project/adminlist/1' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control- Allow-Origin' header is present on the requested resource.在WEB浏览器中出错时
Access to XMLHttpRequest at 'http://localhost:5000/api/project/adminlist/1' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control- Allow-Origin' header is present on the requested resource.
我想我几乎在使用Cors设置等进行了所有尝试,但现在不知道为什么会这样。我还尝试了JsonConvert.SerializeObject(),然后将其返回—> return Ok(JsonConvert.SerializeObject(projects)),这是可行的,但是我无法(在心理上)在每个控制器功能中都做到这一点。
return Ok(JsonConvert.SerializeObject(projects))
请帮忙!非常感谢!
之所以出现此问题,是因为它们在.NET Core 3中几乎没有改变JSON策略。不再支持Json.Net,如果要使用所有Json选项,则必须下载此Nuget :Microsoft.AspNetCore.Mvc.NewtonsoftJson。
Microsoft.AspNetCore.Mvc.NewtonsoftJson
之后,在Startup.cs文件更改/修复/添加行中添加MVC的位置(在ConfigureServices方法中)。
Startup.cs
所以:这是我所做的事情,也是解决问题的原因:
services.AddMvc(option => option.EnableEndpointRouting = false) .SetCompatibilityVersion(CompatibilityVersion.Version_3_0) .AddNewtonsoftJson(opt => opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
我希望它会帮助其他人。干杯!