我已经为我的web api项目启用了CORS,然后将其部署到本地IIS。但是,当我尝试从Angular调用控制器方法时,我收到以下错误:
SEC7128:CORS响应不允许多个Access-Control-Allow-Origin标头。
要在我的网络API上启用CORS,我已将这行代码添加到WebApi.config:
config.EnableCors();
我还将此属性添加到我的控制器类:
[EnableCors(origins: "http://localhost:53720", headers: "*", methods: "*")]
答案 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="*" />