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 上没问题

WebAPI返回数据类型解惑

WebAPI返回数据类型解惑

localhost 在 Webapi 操作中拒绝连接

如何在 ASP.NET MVC/WebAPI 应用程序中支持 HTTP OPTIONS 动词

Web Api 2 Preflight CORS 请求承载令牌