【问题标题】:SignalR throws 405 error on notify/negotiate requestSignalR 在通知/协商请求上抛出 405 错误
【发布时间】:2019-03-01 23:40:25
【问题描述】:

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

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

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

但随后库会额外调用:

http://localhost:5000/notify/negotiate

然后我得到这个错误:

HTTP 错误 405

客户端中的完整错误是:

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

预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 访问。

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

我在 startup.cs 中配置了这个。

     app.UseCors(builder =>
              builder.WithOrigins("http://localhost:4200").AllowAnyMethod
 ().AllowAnyHeader().AllowAnyOrigin());

该代码适用于所有网站。

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

【问题讨论】:

  • 您在UseCors 通话中有WithOrigins(...)AllowAnyOrigin()。删除AllowAnyOrigin() 调用,看看是否有效?

标签: .net-core signalr


【解决方案1】:

我可以建议您直接配置 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 中找不到这个
  • @JohanVanWambeke 我提供的解决方案仅适用于 .NET 标准,不适用于 .NET Core
猜你喜欢
  • 1970-01-01
  • 2018-04-18
  • 2016-03-01
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多