2014-10-16 76 views
4

您可以请我帮助我如何在FireFox和Chrome中启用CORS。 WebAPi在Internet上工作正常,但Chrome/Firefox无法正常工作。WebAPi - Firefox和Chrome中的CORS

这就是我在Firefox的控制台。

跨域请求被阻止:同源策略不允许读取远程资源http://localhost:51/api/abcservice/M2。这可以通过将资源移动到相同的域或启用CORS来解决。

在此先感谢。

回答

3

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

+0

感谢弗洛里安,这是所有做,包括装饰控制器[EnableCors(来源: “*”,标题: “*”,方法: “*”)。但没有运气。 – Abhishek 2014-10-16 10:15:57

+0

您是否尝试过*起源? – 2014-10-16 10:46:06

+0

您需要为EnableCors()指定参数,否则服务器将采用默认值(可能为null)。在我添加下面的变量后,它在全局范围内工作,没有在控制器级配置 config.EnableCors(新的EnableCorsAttribute(“*”,“*”,“GET,POST,PUT,DELETE,OPTIONS”)); – yancyn 2016-01-22 05:50:36

0

随着Web API,当您的请求遇到异常,有时你拿到CORS错误在服务器端,请确保您在Web API控制器上调试请求,然后仔细检查源标头是否设置为响应。

0

在每次GET或POST之前,IE和Edge,Chrome和Firefox都不会做出额外的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(); 
     } 
}