【问题标题】:CORS Response Header (Intermittently) not being returned in IIS - Web APIIIS 中未返回 CORS 响应标头(间歇性) - Web API
【发布时间】:2015-11-24 18:11:14
【问题描述】:

我在 Web API 中启用了 CORS 时遇到问题。对服务器的 OPTIONS 请求正在返回正确的 CORS 标头。但是,如果我更改 API 的 web.config 中的任何内容,则不会返回 CORS 标头 访问控制允许来源:“*”。

要让 Web.API 再次工作,我必须对 web.config 进行更改。重新编译我的 web api 并使用不同的版本号进行部署,然后 api 将在 OPTIONS 飞行前检查期间运行并返回我的 CORS 标头

编辑:添加注册和启用 cors 的代码 Global.asax.cs:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
           GlobalConfiguration.Configure(WebApiConfig.Register);           
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            log4net.Config.XmlConfigurator.Configure();
        }

在 WebApiConfig.cs 中:

 public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {

        config.EnableCors();         

        config.Formatters.JsonFormatter.
                    SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

        config.MapHttpAttributeRoutes();

        config.Services.Add(typeof(IExceptionLogger), new GlobalExceptionLogger());
        config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());......

除此之外......我离开办公室时让 API 保持运行......然后几个小时后 API 再次停止工作,而无需进行任何更改。我在这里猜测,但是当应用程序池回收或 CORS 和路由的配置在回收后被遗忘等时,似乎没有调用 application_Start 例程......

【问题讨论】:

  • 你能显示启用 CORS 的代码吗?

标签: .net rest asp.net-web-api


【解决方案1】:

通常,当您启用 CORS 时,您不会借助 Web.config 而是使用包来执行此操作:

Install-Package Microsoft.AspNet.WebApi.Cors

并在需要时添加适当的属性,或开发自己的 HTTP 过滤器。

【讨论】:

  • 这一切都很好 - 我已经使用您上面描述的 NUget 包启用了 cors...,并且我让 API 可以在所有标头等工作的情况下运行。我的问题是,当我更改 web.config 中的任何内容(例如 Appsetting - 键)时,当我调用 API 时,我的客户端应用程序将收到以下错误:(CORS 标头“Access-Control-Allow-Origin”缺失)方法:-然后我必须重新编译应用程序并再次部署以使 cors 再次工作
  • @Paul 我认为这不是 CORS 问题。您的应用程序很可能由于其他原因而停止工作。显然,在这种情况下它不会发送 CORS 标头,并且客户端应用程序会引发与 CORS 相关的错误。请确保您的应用在 web.config 更改后正常运行。
  • 配置更改后运行良好 - 我可以向 web.conig 添加空格,然后 CORS 响应标头不会发送到调用浏览器。- 我必须基本上重置应用程序才能获得发送 CORS 响应头的应用程序
【解决方案2】:

在考虑了我在编辑中发布的内容之后......并假设 CORS 在应用程序池回收后被禁用。我决定将启用 CORS config.EnableCors(); 的代码段移动到 global.asax 文件中的 class WebApiConfigprotected void Application_Start()。所以我的Application_Start() 例程现在看起来像这样:

protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configuration.EnableCors();
            GlobalConfiguration.Configure(WebApiConfig.Register);`

【讨论】:

    猜你喜欢
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-14
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多