Asp.net web api CORS政策问题刚刚开始,没有代码更改-“;CORS政策';访问控制允许原点';标题包含多个值;

Asp.net web api CORS政策问题刚刚开始,没有代码更改-“;CORS政策';访问控制允许原点';标题包含多个值;,asp.net-web-api,cors,web-config,iis-8,Asp.net Web Api,Cors,Web Config,Iis 8,大家好我有一个奇怪的CORS政策问题。。。我想知道是否有人见过这样的事情,我应该如何解决这个问题 以下是我们得到的CORS问题: Access to XMLHttpRequest at 'https://myservice.dev.mycompany.com/api/SSO/SSOProfile' from origin 'https://myapp.dev.mycompany.com' has been blocked by CORS policy: The 'Access-Control-A

大家好我有一个奇怪的CORS政策问题。。。我想知道是否有人见过这样的事情,我应该如何解决这个问题

以下是我们得到的CORS问题:

Access to XMLHttpRequest at 'https://myservice.dev.mycompany.com/api/SSO/SSOProfile' from origin 'https://myapp.dev.mycompany.com' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header contains multiple values 'https://myapp.dev.mycompany.com, https://myapp.dev.mycompany.com', but only one is allowed.
Chrome dev工具中响应标题中的多个(重复)值为:

Access-Control-Allow-Credentials: true
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://myapp.dev.mycompany.com
Access-Control-Allow-Origin: https://myapp.dev.mycompany.com
我们为cors属性启用的来源是
https://myotherapp.dev.mycompany.com,https://myapp.dev.mycompany.com
“myotherapp”在本例中不相关,因为我们只是尝试登录,“myotherapp”用于使用较少的功能

奇怪的是:

  • 在代码上次工作到崩溃之间没有部署任何代码
  • 这只发生在我们的开发环境中。相同的代码库在本地、测试、阶段和产品中运行良好
  • 我甚至尝试重新部署,重新启动应用程序池,并同时跳转(加载) (b)开发服务器
  • 我不知道有任何网络更改、服务器补丁或IIS更改
这种情况使我相信它与代码无关,而是与环境有关——IIS、负载平衡器或网络相关。我主要是写代码,所以我很难找到它。我已经和一些基础设施团队成员讨论过了,但我们仍然没有弄清楚

有什么想法吗??谢谢

这是WebApiConfig类,我们没有在配置中定义CORS自定义头,只有作为应用程序设置的源文件(请参见下面的代码)。就像我说的,这个错误是在没有任何新代码部署的情况下出现的

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        /*
         *  from web.Dev.config
         *  <add key="corsAttribute" value="https://myotherapp.dev.mycompany.com,https://myapp.dev.mycompany.com" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
         */
        var cors = new EnableCorsAttribute(ConfigurationManager.AppSettings["corsAttribute"], "*", "*");
        cors.SupportsCredentials = true;
        config.EnableCors(cors);
        // Web API routes
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Unspecified;
        }
    }
公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
//Web API配置和服务
/*
*从web.Dev.config
*  
*/
var cors=新的EnableCorsAttribute(ConfigurationManager.AppSettings[“corsAttribute”]、“*”、“*”);
cors.SupportsCredentials=true;
配置使能cors(cors);
//Web API路由
config.maphttpAttribute路由();
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
config.Formatters.JsonFormatter.SerializerSettings.DateTimeZoneHandling=DateTimeZoneHandling.Unspecified;
}
}

找到了它;修好了!我希望这能帮助将来的人


在F5负载平衡器上,有人将dev.mycompany.com添加到与myapp.dev.mycompany.com相同的VIP中。当他们这样做时,他们还添加了一个irule来说明允许源代码,但我们的应用程序在代码/配置中这样做,他们放弃了这条规则,打算给dev.mycompany.com一个自己的VIP。这是为数不多的几天制作的

你能在web.config中发布相关设置吗?您是否使用IIS Cors设置?为什么会被否决?为什么会被否决?我遇到了一个问题,找到了解决办法。