CORS多个标题

时间:2017-04-28 10:50:59

标签: angular asp.net-web-api cors

我已经为我的web api项目启用了CORS,然后将其部署到本地IIS。但是,当我尝试从Angular调用控制器方法时,我收到以下错误:

  

SEC7128:CORS响应不允许多个Access-Control-Allow-Origin标头。

要在我的网络API上启用CORS,我已将这行代码添加到WebApi.config:

config.EnableCors();

我还将此属性添加到我的控制器类:

[EnableCors(origins: "http://localhost:53720", headers: "*", methods: "*")]

3 个答案:

答案 0 :(得分:0)

像错误一样说不允许标头。要允许该标题,您应添加标题:

  

接入控制允许接头

您需要在其中添加值:

  

访问控制允许来源

除此之外,您还需要添加其他标题名称,以便在回复中使用。

E.g。如果您想使用MyAwesomeHeader标题:
{"Access-Control-Allow-Headers": "Access-Control-Allow-Origin, MyAwesomeHeader"}

答案 1 :(得分:0)

"*"因为Access-Control-Allow-Origin不适用于所有浏览器。为了能够从任何站点调用Web API,可以将Origin HTTP请求标头作为单个允许的源,将其复制到Access-Control-Allow-Origin。这可以通过遵循OWIN中间件来完成:

class CORSAnyOriginMiddleware : OwinMiddleware
{
    const string OriginHeader = "Origin";
    const string AllowOriginHeader = "Access-Control-Allow-Origin";

    public CORSAnyOriginMiddleware(OwinMiddleware next) : base(next)
    { }

    public override async Task Invoke(IOwinContext context)
    {
        await Next.Invoke(context);

        if (context.Response?.Headers?.ContainsKey(AllowOriginHeader) ?? false &&
            (context.Request?.Headers?.ContainsKey(OriginHeader) ?? false))
            context.Response.Headers[AllowOriginHeader] =
                context.Request.Headers[OriginHeader];
    }
}

示例用法(在Startup.Configuration(IAppBuilder appBuilder)内):

appBuilder.Use<CORSAnyOriginMiddleware>();

答案 2 :(得分:0)

我设法通过从web.config中删除此行来解决此问题:

<add name="Access-Control-Allow-Origin" value="*" />