我正在使用 SignalR 2 开发一个应用程序,并且在通过 ASP.net 4 RouteTable.Routes 的 .MapOwinRoute() 扩展方法映射 SignalR 时遇到问题。喜欢:
RouteTable.Routes.MapOwinRoute("signalr.hubs", "signalr/hubs", a => a.MapSignalR());
还添加到 Web.Config:
<appSettings>
<add key="owin:AutomaticAppStartup" value="false" />
</appSettings
它映射了。导航到/signalr/hubs 为我提供了集线器代理,但是当我使用我的代码连接时:
$(function () {
var orderProcessing = $.connection.orderProcessing;
$.connection.hub.start().done(function () {
orderProcessing.server.doStuff();
});
});
路由/signalr/negotiate 返回 404。
当我这样做时一切正常:
[assembly: OwinStartup(typeof(Web.Startup))]
namespace Web
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
问题是,使用 OwinStartup 对我来说不是一个选择,因为我需要使用自己的依赖解析器配置 SignalR,将其链接到我使用的通用 IOC 容器,并且在 OwinStartup 时它尚未准备好。我还需要使用自定义选项配置 JSON 序列化器,这些选项也会在稍后阶段进行配置。
不太清楚我在这里缺少什么。
最佳答案
您不想映射路由而是想要映射前缀(路径)。另外,您使用了错误的 url 和错误的 IAppBuilder 重载。
RouteTable.Routes.MapOwinPath("/signalr", app => app.RunSignalR());
上述逻辑采用以 SignalR 开头的任何路径并将其传递给 SignalR 中间件。
关于c# - 使用 .MapOwinRoute() 而不是 OwinStartup/Configuration 类 - 协商返回 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21278065/