为 Web API 1、.net 4.0 启用 CORS 中的问题
Posted
技术标签:
【中文标题】为 Web API 1、.net 4.0 启用 CORS 中的问题【英文标题】:Issue in Enabling CORS for Web API 1, .net 4.0 【发布时间】:2017-09-10 15:29:57 【问题描述】:我需要为我的 Web API 启用 CORS,但我无法升级到 Framework 4.5。 我尝试将以下内容添加到我的 Web.config 以查看它是否有效,但没有:
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Accept,Content-Type,X-Requested-With"/>
我正在通过 ajax 调用访问 URL http://localhost:8484/api/values/
并出现以下错误
XMLHttpRequest 无法加载 http://localhost:8484/api/values。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 405。
【问题讨论】:
你遇到了Pre Flight Request of OPTIONS verb的问题 【参考方案1】:我通过 charanjit singh 找到了这个简单的解决方案。 它运行良好,特别是如果您在 .Net 4.0 和 web api 1 上使用较旧的 Visual Studio 2010。 基本上将此功能添加到您的 Global.asax.cs
protected void Application_BeginRequest(object sender, EventArgs e)
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods",
"GET, POST, PUT, DELETE");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers",
"Content-Type, Accept");
HttpContext.Current.Response.End();
参考。链接:请注意,您必须滚动到底部的 cmets 才能获得答案。 http://www.codeguru.com/csharp/.net/net_asp/using-cross-origin-resource-sharing-cors-in-asp.net-web-api.html
【讨论】:
【参考方案2】:Web API 1.0,您需要在 Global.asax.cs 文件的 Application_BeginRequest 事件处理程序中使用以下语句启用 CORS 支持。
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", allowedOrigin);
可以在三个级别启用对 CORS 的支持。其中包括:
动作级别 控制器级别 全球层面
refer link
【讨论】:
以上是关于为 Web API 1、.net 4.0 启用 CORS 中的问题的主要内容,如果未能解决你的问题,请参考以下文章
基于.Net Framework 4.0 Web API开发:ASP.NET Web APIs 基于令牌TOKEN验证的实现
如何在 ASP.Net Web API 中为特定控制器启用 Windows 身份验证
基于.Net Framework 4.0 Web API开发:ASP.NET Web APIs AJAX 跨域请求解决办法(CORS实现)
基于.Net Framework 4.0 Web API开发:ASP.NET Web APIs 异常的统一处理Attribute 和统一写Log 的Attribute的实现