我的工作项目用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
函数。我可以通过设置
WithOrigins()
或.SetIsOriginAllowed(_ => true)
而不是AllowAnyOrigin()
不再有效的AllowCredentials()
来轻松修复此问题。在那之后,我能够启动该应用程序,我认为一切都很好,但是直到现在为止,我一直卡在我不知道如何解决的问题上。
我有数据库关系N:N和关系表来处理此问题,这意味着我具有具有
Admin
属性的AdminProject list
实体,然后又具有具有AdminProject
和Admin list
属性的Project list
实体以及具有Project
属性的AdminProject list
实体。当我列出某些管理员的项目时,我在Controller中返回了
return Ok(projects)
,在这里我只对getAll
实体使用AdminProject
,然后使用Select
仅返回项目。为此,我必须在project / admin中使用
[JsonIgnore]
来设置创建json时不需要避免循环的属性。话虽如此:现在在.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.
在控制台中调试时以及在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))
,这是可行的,但是我无法(在心理上)在每个 Controller 功能中都做到这一点。请帮忙!非常感谢!
最佳答案
之所以发生此问题,是因为它们在.NET Core 3中几乎没有改变JSON策略。不再支持Json.Net,如果要使用所有Json选项,则必须下载此Nuget:Microsoft.AspNetCore.Mvc.NewtonsoftJson
。
之后,在Startup.cs
文件的change / fix / add行中添加MVC(在ConfigureServices
方法中)。
所以:这是我所做的事情,也是解决我的问题的原因:
services.AddMvc(option => option.EnableEndpointRouting = false)
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddNewtonsoftJson(opt => opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore);
我希望它会帮助其他人。
干杯!
关于json - .NET CORE 3升级CORS和Json(cycle)XMLHttpRequest错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912012/