美文网首页
如何写一个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中间件?

    什么是OWIN中间件? 如何写一个中间件?

  • 概要

    概要 IdentityServer3被打包成一个OWIN的中间件,使用经典的选项(options)模式来配置: I...

  • OWIN与Web Api基础

    OWIN基础 OWIN是啥? OWIN 层次 以及 流程 大致Owin分为以下几个层: Server 这个是直接与...

  • OWIN环境扩展

    layout: docs-default OWIN 环境扩展 IdentityServer3也提供了OWIN环境(...

  • Owin介绍

    什么是OWIN? OWIN的英文全称是Open Web Interface for .NET。 如果仅从名称上解析...

  • ABP CORS

    1.owin cors在web项目引入 nuget包:Microsoft.Owin.Cors,找到 web项目ap...

  • OWIN:HttpListener

    概述 OWIN (Open Web Server Interface for .NET) 是一个规范和标准,OWI...

  • OwinSelfHost自宿主的使用

    Owin介绍看上篇 链接 OWIN将多种应用框架使用统一的接口来实现各框架之间的适配! 新建控制台项目 新建普通控...

  • koa2中间件

    如何写一个koa2中间件呢?下面写一个简单的案例 创建koa2服务,新建一个文件 如何使用? 在需要使用的地方引入...

  • GetOwinContext() 无法调用

    需要安装 Microsoft.Owin.Host.SystemWeb这个类库 另外需要安装Microsoft.As...

网友评论

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

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