我在搜索时找不到具体的答案,所以我在这里发布我的解决方案。
我们使用 SignalR 工作了很长时间,然后一些用户开始收到 404 错误,并将调用从 AngularJs/jQuery 连接到服务器。协商会正常工作并返回 200 代码。
默认情况下,服务器端 (ASP.NET 4.6.1) 必须对 URL 的大小施加限制,而不是像您可能期望的那样返回 414(请求 URI 太长),它必须截断URL 的长度约为 2,083,但仍会尝试处理它。我假设 404 是 SignalR 集线器响应,因为现在截断的字符串具有与预期不匹配的查询字符串参数。我们看到它是因为我们通过查询字符串参数传递了几个自定义值和安全访问 token ,这增加了大小。访问 token 是通过查询字符串传递的,因为我们想使用 websockets,而 websockets 不存在 header 。当您向 token 添加更多属性和角色时,它会增长,这就是我们超过默认大小限制的原因。
最佳答案
修复很简单。只需更新您的服务器 web.config 以允许更长的 URL。
<system.web>
<httpRuntime targetFramework="4.5" maxRequestLength="30000000" maxUrlLength="40960" maxQueryStringLength="2097151" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="30000000" maxUrl="40960" maxQueryString="2097151" />
</requestFiltering>
</security>
</system.webServer>
关于asp.net - SignalR 连接并启动导致 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56223453/