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管道所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)