gpt4 book ai didi

signalr - 有人可以提供带有显式起源列表的 CorsPolicy 实现吗?

转载 作者:行者123 更新时间:2023-12-02 13:10:35 25 4
gpt4 key购买 nike

引用 SignalR Hubs API Guide

在配置注释中表示如下信息:

// 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 属性有一个私有(private) setter,没有允许注入(inject) origin 的构造函数,也没有公开的 setter 方法。关于 Origins 列表,它似乎只公开了一个“AllowAllOrigins”属性,然后是一个无用的 Origins getter,它仅反射(reflect)在 CorsPolicy 构建期间构建的空列表。

<小时/>

特别值得注意的是,默认 app.UseCors(CorsOptions.AllowAll)设定完全不连贯。根据其自己的工具提示,它是“允许所有 header 、所有方法、任何来源并支持凭据的策略。”

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”选项吗?

最佳答案

你看过the source吗?对于 CorsOptions.AllowAll ?它显示了 CorsOptions 如何被 build 。你可以做类似的事情

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 (另请参阅 its source )。这应该具有微调策略所需的属性。列表属性具有私有(private) setter (可能是为了避免潜在的 null 指针),但它们都在默认构造函数中初始化,因此您应该能够添加到它们。

关于signalr - 有人可以提供带有显式起源列表的 CorsPolicy 实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26657645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com