【问题标题】:WebAPi - CORS in Firefox and chromeWebAPi - Firefox 和 chrome 中的 CORS
【发布时间】:2014-12-11 15:20:16
【问题描述】:

您能否帮助我了解如何在 FireFox 和 Chrome 中启用 CORS。 WebAPi 在 Internet 上运行良好,但与 Chrome/Firefox 不兼容。

这就是我在 Firefox 控制台中得到的。

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

提前致谢。

【问题讨论】:

    标签: jquery asp.net-web-api 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();
              }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-10-27
        • 2016-01-15
        • 1970-01-01
        • 2013-09-24
        • 2012-12-29
        • 2017-03-07
        • 2015-08-21
        相关资源
        最近更新 更多