您可以请我帮助我如何在FireFox和Chrome中启用CORS。 WebAPi在Internet上工作正常,但Chrome/Firefox无法正常工作。WebAPi - Firefox和Chrome中的CORS
这就是我在Firefox的控制台。
跨域请求被阻止:同源策略不允许读取远程资源http://localhost:51/api/abcservice/M2
。这可以通过将资源移动到相同的域或启用CORS来解决。
在此先感谢。
您可以请我帮助我如何在FireFox和Chrome中启用CORS。 WebAPi在Internet上工作正常,但Chrome/Firefox无法正常工作。WebAPi - Firefox和Chrome中的CORS
这就是我在Firefox的控制台。
跨域请求被阻止:同源策略不允许读取远程资源http://localhost:51/api/abcservice/M2
。这可以通过将资源移动到相同的域或启用CORS来解决。
在此先感谢。
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 }
);
}
}
随着Web API,当您的请求遇到异常,有时你拿到CORS错误在服务器端,请确保您在Web API控制器上调试请求,然后仔细检查源标头是否设置为响应。
在每次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();
}
}
感谢弗洛里安,这是所有做,包括装饰控制器[EnableCors(来源: “*”,标题: “*”,方法: “*”)。但没有运气。 – Abhishek 2014-10-16 10:15:57
您是否尝试过*起源? – 2014-10-16 10:46:06
您需要为EnableCors()指定参数,否则服务器将采用默认值(可能为null)。在我添加下面的变量后,它在全局范围内工作,没有在控制器级配置 config.EnableCors(新的EnableCorsAttribute(“*”,“*”,“GET,POST,PUT,DELETE,OPTIONS”)); – yancyn 2016-01-22 05:50:36