.net-core - SignalR 在通知/协商请求上抛出 405 错误

标签 .net-core signalr

我用这样的角度连接到服务器:

    this._hubConnection = new signalR.HubConnectionBuilder()
  .withUrl(location.protocol + '//localhost:5000/notify')
  .configureLogging(signalR.LogLevel.Information)
  .build();

代码或主机都没有问题。该请求有效。

但随后图书馆又对以下内容进行了额外调用:
http://localhost:5000/notify/negotiate

然后我收到这个错误:

HTTP ERROR 405



客户端中的完整错误是:

Failed to load http://localhost:5000/notify/negotiate: Response to 

preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access.



除了上述要求之外,我在网站上没有 cors 问题。

我在startup.cs中配置了这个。
     app.UseCors(builder =>
              builder.WithOrigins("http://localhost:4200").AllowAnyMethod
 ().AllowAnyHeader().AllowAnyOrigin());

该代码适用于所有站点。

如果其余请求有效,为什么会突然出现 cors 错误?

最佳答案

我可以建议您直接配置您的 webapp 的 web.config 文件,添加以下代码行(它适用于 IIS,不确定是否适用于 IIS Express):

<system.webServer>
   <httpProtocol>
      <customHeaders>
         <add name="Access-Control-Allow-Origin" value="http://localhost:4200" />
         <add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS,PUT,DELETE,PATCH" />
         <add name="Access-Control-Allow-Headers" value="Content-Type, X-Requested-With" />
         <add name="Access-Control-Allow-Credentials" value="true" />
      </customHeaders>
   </httpProtocol>
</system.webServer>

关于.net-core - SignalR 在通知/协商请求上抛出 405 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513572/

相关文章:

c# - 如何在get方法中传递类对象列表 - asp.net core 2.1

asp.net-core - .Net 核心 2.2 的 .Net 标准版本

angular - 访问 XMLHttpRequest 已被阻止源 ASP.NET CORE 2.2.0/Angular 8/signalr1.0.0 [(CORS Policy-Access-Control-Allow-Origin) failed]

c# - 如何自动记录 .NET Core WebAPI 中的每个请求?

c# - ASP.NET Core 中的 PostAsJsonAsync 方法在哪里?

c# - signalR 调用服务器方法,该方法在集线器外部调用回调方法。如何从该方法调用客户端函数?

javascript - SignalR 不适用于 Chrome 和 Internet Explorer

websocket - 在 ASP.NET Core 1.0 中使用 SignalR

javascript - SignalR 客户端方法未从服务器端按钮单击触发

c# - 从格式 dd.MM.yyyy hh :mm:ss 将字符串解析为 .net 核心中的日期时间