参考SignalR 集线器 API 指南 http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client#crossdomain
配置注释中表示如下信息:
// 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,没有允许注入 origin 的构造函数,也没有公开的 setter 方法。关于 Origins 列表,它似乎只公开了一个“AllowAllOrigins”属性,然后公开了一个无用的 Origins getter,它仅反映了在 CorsPolicy 构造期间构造的空列表。
特别值得注意的是,默认
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”选项?
你看过吗来源 https://katanaproject.codeplex.com/SourceControl/latest#src/Microsoft.Owin.Cors/CorsOptions.cs for 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
(对于当前请求),您需要返回一个CorsPolicy http://msdn.microsoft.com/en-us/library/system.web.cors.corspolicy(v=vs.118).aspx(另请参阅它的来源 https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Cors/CorsPolicy.cs)。这应该具有微调策略所需的属性。列表属性具有私有设置器(可能是为了避免潜在的null
指针),但它们都在默认构造函数中初始化,因此您应该能够添加它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)