SignalR、ASP.NET 5 和 CORS

Posted

技术标签:

【中文标题】SignalR、ASP.NET 5 和 CORS【英文标题】:SignalR, ASP.NET 5 and CORS 【发布时间】:2015-08-14 05:51:00 【问题描述】:

我正在尝试将 SignalR 与我的 MVC6 应用程序一起使用,但遇到了 CORS 问题。

首先:如果我在http://localhost:1234/index.html(与我的网络应用程序相同)上托管我的 index.html 文件,它就可以工作。 但是当我在其他地方托管它时(例如在 file:///C:/Users/me/Documents/index.html 中),我有这个错误:

请求中没有“Access-Control-Allow-Origin”标头 资源。因此不允许访问 Origin 'null'。

当然,我尝试启用 CORS,这是我的启动文件:

public class Startup

    public void ConfigureServices(IServiceCollection services)
    
        services.AddMvc();
        services.AddSignalR();

        services.AddCors();
        var policy = new Microsoft.AspNet.Cors.Core.CorsPolicy();
        policy.Origins.Add("*");
        policy.Headers.Add("*");
        policy.Methods.Add("*");
        services.ConfigureCors(x => x.AddPolicy("allowall", policy));
    

    public void Configure(IApplicationBuilder app)
    
        app.UseCors("allowall");
        app.UseSignalR();
        app.UseMvc();
    

但是现在,我又遇到了一个错误:

不能在“Access-Control-Allow-Origin”中使用通配符“*” 当凭证标志为真时标头。因此,原点“空”是 不允许访问。

然后我尝试:

policy.SupportsCredentials = false;

但仍然出现同样的错误。

我该怎么办?

【问题讨论】:

投反对票。这个问题的标题有点误导。应该说得更清楚,那就是关注文件服务而不是 http 服务 【参考方案1】:

在 SignalR 团队中看到,这是在 http://localhost:port 上工作,但不是在 file:///C:/Users/me/Documents/index.html 上,这是正常的。

【讨论】:

以上是关于SignalR、ASP.NET 5 和 CORS的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core的实时库: SignalR简介及使用

《ASP.NET SignalR系列》第一课 认识SignalR

如何从我的 ASP.NET Core 5 Web 应用程序中的 SignalR 操作中解决错误“无法访问已释放的上下文实例”?

ASP.NET Framework 4.6.2 SignalR 和 Redis 背板未连接

[Asp.net 开发系列之SignalR篇]专题二:使用SignalR实现酷炫端对端聊天功能

ASP.NET Core的实时库: SignalR -- 预备知识