美文网首页
如何写一个OWIN中间件?

如何写一个OWIN中间件?

作者: 黄咕咕鸡 | 来源:发表于2017-01-12 14:42 被阅读0次

    什么是OWIN中间件?

    承接上篇,中间件的概念,前面已经讲过了,类似于HttpModule,用于对于管线做点什么是,比方说,过滤,分发,日志.
    

    如何写一个中间件?

    继承抽象类OwinMiddleware,通过IDE自动override两个方法.这时候,你的代码如下:
    
        public class HelloMiddleware : OwinMiddleware
        {
            //实例化中间件与(可选的)指向下一个组件的指针。
            public HelloMiddleware(OwinMiddleware next) : base(next)
            {
            }
    
            //注意看,这个方法的返回值是Task,这其实是一个信号,告诉我们可以使用async去修饰,将方法设置为异步方法.
            public override Task Invoke(IOwinContext context)
            {
                //do something when invode
                throw new NotImplementedException();
            }
        }
    
    尝试着改造一下这个类.请在程序集中引入Json.NET 还有Microsoft.Owin
    
        public class HelloMiddleware : OwinMiddleware
        {
            //实例化中间件与(可选的)指向下一个组件的指针。
            public HelloMiddleware(OwinMiddleware next) : base(next)
            {
            }
    
            
            public override async Task Invoke(IOwinContext context)
            {
                if (!IsHelloRequest(context))//过滤不属于这个中间件处理的Http请求
                {
                    await Next.Invoke(context);//直接甩给Next节点处理.
                    return;
                }
                var helloInfo = new { name = "songtin.huang", description = "Fa~Q", message = "Hello" };
                var json = JsonConvert.SerializeObject(helloInfo, new JsonSerializerSettings()
                {
                    Formatting = Formatting.Indented,
                    ContractResolver = new CamelCasePropertyNamesContractResolver()
                });
                context.Response.Write(json);
                context.Response.ContentType = "application/json;charset=utf-8";
            }
    
            //过滤请求,只拦截特定Uri
            private static bool IsHelloRequest(IOwinContext context)
            {
                return string.Compare(context.Request.Path.Value, "/$hello", StringComparison.OrdinalIgnoreCase) == 0;
            }
        }    
    
    到这里一个中间件就写完了.然后
    
        public class Startup
        {
            public void Configuration(IAppBuilder app)
            {
                // 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
                var config = new HttpConfiguration();
                config.Services.Replace(typeof(IContentNegotiator), new JsonFirstContentNegotiator());
                app.UseWebApi(config);
                app.Use<HelloMiddleware.HelloMiddleware>();//这里配置一下就可以用了.
            }
        }
    
    F5启动,然后在浏览器url上,加上/$hello,应该就能看到json格式的我的问候...祝你好运

    相关文章

      网友评论

          本文标题:如何写一个OWIN中间件?

          本文链接:https://www.haomeiwen.com/subject/jpwdbttx.html