表示配置注释中的以下信息:
// Setup the CORS middleware to run before SignalR.
// By default this will allow all origins. You can
// configure the set of origins and/or http verbs by
// providing a cors options with a different policy.
map.UseCors(CorsOptions.AllowAll);
但是,System.Web.CorsPolicy的Origins属性有一个私有的setter,没有允许注入源的构造函数,也没有暴露的setter方法。关于Origins列表,它似乎只暴露了一个“AllowAllOrigins”属性,然后是一个无用的Origins getter,它只反映出在CorsPolicy构造过程中构造的空List。
特别注意,默认 app.UseCors(CorsOptions.AllowAll) 设置完全不连贯。通过它自己的工具提示,它是“允许所有标题,所有方法,任何来源和支持凭证的策略。”
A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true
我的配置目前是“愚蠢的简单”SignalR配置
public void Configuration(IAppBuilder app)
{
app.UseCors(CorsOptions.AllowAll);
app.MapSignalR();
}
任何人都可以提供一个Microsoft.Owin.Cors.CorsMiddleware示例,该示例将使用Access-Control-Allow-Origin明确的白名单重新实现“AllowAll”选项吗?
答案 0 :(得分:8)
您是否查看CorsOptions.AllowAll
CorsOptions
了?它显示了var policy = new CorsPolicy
{
AllowAnyHeader = true,
AllowAnyMethod = true,
AllowAnyOrigin = false, // False by default, just left it here.
SupportsCredentials = true
};
policy.Origins.Add("http://foo.example.com");
app.UseCors(new CorsOptions
{
PolicyProvider = new CorsPolicyProvider
{
PolicyResolver = context => Task.FromResult(policy)
}
});
的创建方式。你可以做点什么
PolicyResolver
如您所见,您设置了Func<IOwinRequest, Task<CorsPolicy>>
属性,即IOwinContext
。根据{{1}}(针对当前请求),您需要返回the source(另请参阅CorsPolicy
)。这应具有微调策略所需的属性。列表属性具有私有设置器(可能是为了避免潜在的null
指针),但它们都是在默认构造函数中初始化的,因此您应该能够添加它们。