【问题标题】:Using .MapOwinRoute() instead of the OwinStartup / Configuration class - negotiate returns 404使用 .MapOwinRoute() 而不是 OwinStartup / Configuration 类 - 协商返回 404
【发布时间】:2015-08-29 08:42:09
【问题描述】:

我正在使用 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 序列化程序,这些选项也会在稍后阶段进行配置。

无法完全弄清楚我在这里缺少什么。

【问题讨论】:

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


    【解决方案1】:

    您不想映射路由以映射前缀(路径)。此外,您使用了错误的 url 和错误的 IAppBuilder 重载。

    RouteTable.Routes.MapOwinPath("/signalr", app => app.RunSignalR());
    

    上述逻辑采用任何以 SignalR 开头的路径,并将其传递给 SignalR 中间件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-28
      • 2011-05-04
      • 2017-10-26
      • 2020-06-07
      • 2020-11-12
      • 2018-12-05
      • 2018-06-16
      • 1970-01-01
      相关资源
      最近更新 更多