如何寫一個(gè)OWIN中間件?

什么是OWIN中間件?

承接上篇,中間件的概念,前面已經(jīng)講過了,類似于HttpModule,用于對于管線做點(diǎn)什么是,比方說,過濾,分發(fā),日志.

如何寫一個(gè)中間件?

繼承抽象類OwinMiddleware,通過IDE自動(dòng)override兩個(gè)方法.這時(shí)候,你的代碼如下:
    public class HelloMiddleware : OwinMiddleware
    {
        //實(shí)例化中間件與(可選的)指向下一個(gè)組件的指針。
        public HelloMiddleware(OwinMiddleware next) : base(next)
        {
        }

        //注意看,這個(gè)方法的返回值是Task,這其實(shí)是一個(gè)信號,告訴我們可以使用async去修飾,將方法設(shè)置為異步方法.
        public override Task Invoke(IOwinContext context)
        {
            //do something when invode
            throw new NotImplementedException();
        }
    }
嘗試著改造一下這個(gè)類.請?jiān)诔绦蚣幸隞son.NET 還有Microsoft.Owin
    public class HelloMiddleware : OwinMiddleware
    {
        //實(shí)例化中間件與(可選的)指向下一個(gè)組件的指針。
        public HelloMiddleware(OwinMiddleware next) : base(next)
        {
        }

        
        public override async Task Invoke(IOwinContext context)
        {
            if (!IsHelloRequest(context))//過濾不屬于這個(gè)中間件處理的Http請求
            {
                await Next.Invoke(context);//直接甩給Next節(jié)點(diǎn)處理.
                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;
        }
    }    
到這里一個(gè)中間件就寫完了.然后
    public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            // 有關(guān)如何配置應(yīng)用程序的詳細(xì)信息,請?jiān)L問 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啟動(dòng),然后在瀏覽器url上,加上/$hello,應(yīng)該就能看到j(luò)son格式的我的問候...祝你好運(yùn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容