c# - 使用 .MapOwinRoute() 而不是 OwinStartup/Configuration 类 - 协商返回 404

标签 c# asp.net signalr signalr-hub owin

我正在使用 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/

相关文章:

c# - 属性路由继承

c# - 不可变集合?

c# - aspx页面VS2012的javascript函数中未命中断点

asp.net - 表单中的两个按钮,都称为

c# - IQueryable with Foreach 结果

c# - 自定义过滤器下拉列表

signalr - Signalr 是否更改 ConnectionId OnReconnected 方法?

c# - 找不到类型或命名空间 IAppBuilder(缺少使用指令 pr 程序集引用)

c# - 比较日期时间不起作用

c# - ASP.net core signalr Angular 客户端,错误 "Response to preflight request doesn' t 通过访问控制检查”