框架从 4.5.2 升级到 4.7.2 后 C# Web API 引发 CORS 错误
Posted
技术标签:
【中文标题】框架从 4.5.2 升级到 4.7.2 后 C# Web API 引发 CORS 错误【英文标题】:C# Web API Throws CORS error after framework upgrade from 4.5.2 to 4.7.2 【发布时间】:2021-05-05 08:08:21 【问题描述】:我有一个用 C# 编写的 ASP.NET MVC 和 REST Web API。几天前,我们将 ASP.NET MVC 和 Web API 的框架版本从 4.5 升级到了 4.7.2,之后,它不断抛出 CORS 错误,说我的 ASP.NET MVC URL 无法调用 REST
请求的资源上不存在“Access-Control-Allow-Origin”标头
有趣的是,当我们几年前开始这个项目时,我们已经配置了 Answers 中提到的修复程序,并且到目前为止工作正常。
我什至尝试了该问题的其他答案,但仍然抛出相同的错误。我什至升级了所有 NuGet 包,但遇到了同样的问题。
我正在通过 Ajax 从我的 ASP.NET MVC 应用程序调用 API。
这是我的 Global.asax.cs 文件配置
protected void Application_BeginRequest()
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
//These headers are handling the "pre-flight" OPTIONS call sent by the browser
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, PUT, POST, DELETE, OPTIONS,");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "userId,ApiKey");
HttpContext.Current.Response.End();
我缺少任何配置?
【问题讨论】:
您是否已恢复到旧版本以确认这实际上导致了问题?在任何情况下,我们都需要您的配置来验证这一点。 @Marco 是的,我有,它工作正常。事实上,它也适用于升级的 MVC 版本和旧的 API 构建。 然后我们将需要您的 api 配置来为我们自己验证这一点。不看代码,都是猜测。 粗略猜测 - 是否需要设置CompatibilityVersion
? SetCompatibilityVersion
@user1672994 我没有使用 .netcore
【参考方案1】:
这是框架升级后它停止为您工作的原因。
在 4.5.2 上,将为 OPTIONS 触发 Application_BeginRequest。 在 4.7.2 上,不会为 OPTIONS 触发 Application_BeginRequest。
如果您在 web.config 中添加以下内容,则 Application_BeginRequest 将在 4.7.2 上为 OPTIONS 触发。
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
源码:https://github.com/ShahJe/MVCOptionsDemo
【讨论】:
它仍然抛出同样的错误。你能提一下只是想检查的参考吗 看看答案中提到的repo。我在 Application_BeginRequest 上设置了一个断点,并注意到升级到 4.7.2 后它没有达到断点。我搜索了 Application_BeginRequest not fire for OPTIONS,看到有人推荐使用 runAllManagedModulesForAllRequests。我在 web.config 中添加了它,并且断点在 4.7.2 开始为我命中。以上是关于框架从 4.5.2 升级到 4.7.2 后 C# Web API 引发 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章
从 .NET 4.5 MVC 4 升级到 .NET 4.5.2 MVC 5.2
具有 4.7.2 目标框架版本的 C# 项目可以在 .net 4.6.1 上运行吗