c# – 在SignalR lib中使用SignalR 2.0 Owin管道

c# – 在SignalR lib中使用SignalR 2.0 Owin管道,第1张

概述我正在考虑将此库升级到SignalR 2.0 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy 我希望它支持带有IAppBuilder接口的2.0 Owin管道,而不是像SignalR 1.x那样使用RouteCollection. 问题是,如何从IAppBuilder获取routecollection?我需要它来重新定制 我正在考虑将此库升级到SignalR 2.0

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy

我希望它支持带有IAppBuilder接口的2.0 Owin管道,而不是像SignalR 1.x那样使用RouteCollection.

问题是,如何从IAppBuilder获取routecollection?我需要它来重新定制一个处理我的自定义Js脚本的自定义IhttpHandler(就像SignalR注册它们的hub脚本一样)

我的lib的1.x设置看起来像这样

public static class SignalRConfig{    public static voID Register(RouteCollection routes)    {        routes.MapHubs();        routes.MapEventProxy<Contracts.Events.Event>();    }}

我的2.0目标是这样配置的

public static class SignalRConfig{    public static voID Configuration(IAppBuilder app)    {        app.MapSignalR();        app.MapEventProxy<Contracts.Events.Event>();    }}

我的代码依赖于RouteCollection看起来像这样

public static class RouteCollectionExtensions{    public static voID MapEventProxy<TEvent>(this RouteCollection routes)    {        bootstrapper.Init<TEvent>();        routes.Add(new Route(                       "eventAggregation/events",new RouteValueDictionary(),new RouteValueDictionary() {{"controller",string.Empty}},new EventScriptRouteHandler<TEvent>()));    }}

编辑:看起来让Owin提供请求非常复杂,我可以使用SignalR 2.0中的辅助方法来注册路由和该路由的处理程序吗?

更新:
使用此代码看起来像我在正确的轨道上

using Owin;using SignalR.EventAggregatorProxy.Boostrap;namespace SignalR.EventAggregatorProxy.Owin{    public static class AppBuilderExtensions    {        public static voID MapEventProxy<TEvent>(this IAppBuilder app)        {            bootstrapper.Init<TEvent>();            app.Map("/eventAggregation/events",subApp => subApp.Use<EventScriptMIDdleware<TEvent>>());        }    }}

现在我只需要实现EventScriptMIDdleware

更新:最后一块拼图,现在我只需要我的中间件实际吐出javacript,应该很容易

namespace SignalR.EventAggregatorProxy.Owin{    public class EventScriptMIDdleware<TEvent> : OwinMIDdleware    {        public EventScriptMIDdleware(OwinMIDdleware next) : base(next)        {        }        public overrIDe Task Invoke(IOwinContext context)        {            return context.Response.WriteAsync("Hello World!!");        }    }}
解决方法 最终版本看起来像这样,app builder扩展

public static class AppBuilderExtensions{    public static voID MapEventProxy<TEvent>(this IAppBuilder app)    {        bootstrapper.Init<TEvent>();        app.Map("/eventAggregation/events",subApp => subApp.Use<EventScriptMIDdleware<TEvent>>());    }}

在MIDdleware中调用方法

public overrIDe Task Invoke(IOwinContext context){    var response = context.Response;    response.ContentType = "application/JavaScript";    response.StatusCode = 200;    if (ClIEntCached(context.Request,scriptBuildDate))    {        response.StatusCode = 304;        response.headers["Content-Length"] = "0";        response.Body.Close();        response.Body = Stream.Null;        return Task.Fromresult<Object>(null);    }    response.headers["Last-ModifIEd"] = scriptBuildDate.ToUniversalTime().ToString("r");    return response.WriteAsync(Js);}

这里有完整的源代码

https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/tree/master/SignalR.EventAggregatorProxy/Owin

总结

以上是内存溢出为你收集整理的c# – 在SignalR lib中使用SignalR 2.0 Owin管道全部内容,希望文章能够帮你解决c# – 在SignalR lib中使用SignalR 2.0 Owin管道所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230271.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存