WebAPi - Firefox 和 chrome 中的 CORS
Posted
技术标签:
【中文标题】WebAPi - Firefox 和 chrome 中的 CORS【英文标题】:WebAPi - CORS in Firefox and chrome 【发布时间】:2014-12-11 15:20:16 【问题描述】:您能否帮助我了解如何在 FireFox 和 Chrome 中启用 CORS。 WebAPi 在 Internet 上运行良好,但与 Chrome/Firefox 不兼容。
这就是我在 Firefox 控制台中得到的。
跨域请求被阻止:同源策略不允许读取位于http://localhost:51/api/abcservice/M2
的远程资源。这可以通过将资源移动到同一域或启用 CORS 来解决。
提前致谢。
【问题讨论】:
【参考方案1】:CORS 不依赖于浏览器,您必须在服务器端启用它。
安装 CORS WebApi NuGet 包:
Install-Package Microsoft.AspNet.WebApi.Cors
然后在应用程序启动时:
public static class WebApiConfig
public static void Register(HttpConfiguration config)
// CORS
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/controller/id",
defaults: new id = RouteParameter.Optional
);
Source
【讨论】:
感谢 Florian,这一切都完成了,包括使用 [EnableCors(origins: "", headers: "", methods: "*")] 装饰控制器。但没有运气。 你尝试过使用 * 原点吗? 您需要为 EnableCors() 指定参数,否则服务器将采用默认值(可能为 null)。在我添加下面的变量后,它可以作为全局工作而无需在控制器级别进行配置。 config.EnableCors(new EnableCorsAttribute("", "", "GET, POST, PUT, DELETE, OPTIONS"));【参考方案2】:使用 Web API,当您的请求在服务器端遇到异常时,有时您会收到 CORS 错误,因此请确保在 Web API 控制器上调试请求,并仔细检查是否将源标头设置为响应.
【讨论】:
【参考方案3】:不太可能 IE 和 Edge、Chrome 和 Firefox 在每次 GET 或 POST 之前发出额外的 OPTIONS 请求,这就是为什么您应该在 global.asax 中为其显式配置属性的原因。试试这个代码:
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", "post, put, delete, get");
HttpContext.Current.Response.AddHeader("access-control-allow-headers", "content-type, accept");
HttpContext.Current.Response.AddHeader("access-control-max-age", "1728000");
HttpContext.Current.Response.End();
【讨论】:
以上是关于WebAPi - Firefox 和 chrome 中的 CORS的主要内容,如果未能解决你的问题,请参考以下文章
Firefox 上的 ASP.NET Core Web API CORS 错误,但在 Chrome 上没问题