OWIN之中间件用法示例
2019獨角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
? ? 這里就直接進入主題了,關(guān)于OWIN中間件的介紹,在此不做過多闡述。以控制臺為示例,向大家演示了如何使用OWIN的中間件。
首先我們需要應(yīng)用的類庫有:
- Owin
- Microsoft.Owin
- Microsoft.Owin.Hosting
- Microsoft.Owin.Host.HttpListener
以上類庫,nuget引用即可。
其次,給控制臺程序,添加一個應(yīng)用程序啟動類。
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; using MiddleWareApp.Extensions;//引用擴展類 /******************************************************************************************************************* * * 說 明: 應(yīng)用程序啟動類(版本:Version1.0.0)* 作 者:李朝強* 日 期:2015/05/19* 修 改:* 參 考:http://my.oschina.net/lichaoqiang/* 備 注:暫無...* * * ***************************************************************************************************************/ [assembly: OwinStartup(typeof(MiddleWareApp.Startup1))]namespace MiddleWareApp {/// <summary>/// 啟動類/// </summary>public class Startup1{/// <summary>/// /// </summary>/// <param name="app"></param>public void Configuration(IAppBuilder app){//app.Use<MiddleWare.CustomMiddleWare>();--POST//app.Use(typeof(MiddleWare.CustomMiddleWare));//注冊自定義中間件//app.Use(typeof(MiddleWare.StaticMiddleWare));//注冊第二個中間件app.UseCustomMiddleWare(new CustomOptions(){//自定義配置信息Name = "CustomMiddleWare"});app.UseStaticMiddleWare(new StaticOptions(){});app.Run((context) =>{context.Response.ContentType = "text/plain";Console.WriteLine("來自請求:{0}", context.Request.Uri);return context.Response.WriteAsync("000");});}} }在控制臺主程序函數(shù)中,啟動WebApp。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Owin.Hosting;namespace MiddleWareApp {class Program{/// <summary>/// 主程序/// </summary>/// <param name="args"></param>private static void Main(string[] args){using (WebApp.Start<Startup1>(new StartOptions("http://localhost:9966/"){})){Console.WriteLine("OWIN服務(wù)器已經(jīng)啟動!按任意鍵退出");Console.ReadLine();}}} }這里嘗試監(jiān)聽,監(jiān)聽端口9966。需要注意的是,WebApp.Start方法,返回的是一個集成IDsipose接口的對象,我們?nèi)绻O(jiān)聽HTTP請求,使用using的時候,注意,它一旦釋放,客戶端請求將失敗,道理很簡單,就是不能把WebApp.Start方法啟動后返回的對象給釋放了,否則,一切監(jiān)聽和中間件將無濟于事。
我這里定義了兩個中間件,分別為CustomMiddleWare和StaticMidlleWare。于此同時,我為了使用中間件的選項參數(shù),定義了一個中間件基類MiddleWareBase(抽象類)。CustomMiddleWare直接繼承
Microsoft.Owin.OwinMiddlewareStaticMidlleWare則繼承
MiddleWareBase<T>?類 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Owin;/******************************************************************************************************************* * * 說 明: 授權(quán)(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 18:40:20* 修 改:2017-03-26 18:40:20* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.MiddleWare {/// <summary>/// 中間件基類/// </summary>/// <typeparam name="T"></typeparam>public abstract class MiddleWareBase<T> : Microsoft.Owin.OwinMiddleware{/// <summary>/// 設(shè)置選項/// </summary>public T Options { get; protected set; }/// <summary>/// 構(gòu)造函數(shù)/// </summary>/// <param name="next"></param>protected MiddleWareBase(OwinMiddleware next): base(next){}/// <summary>/// 構(gòu)造函數(shù)重載/// </summary>/// <param name="next"></param>/// <param name="options"></param>protected MiddleWareBase(OwinMiddleware next, T options): base(next){this.Options = options;}} } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Owin; using MiddleWareApp.Extensions;/******************************************************************************************************************* * * 說 明: 授權(quán)(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 17:57:30* 修 改:2017-03-26 17:57:30* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.MiddleWare {/// <summary>/// CustomMiddleWare/// </summary>public class CustomMiddleWare : Microsoft.Owin.OwinMiddleware{/// <summary>/// Options/// </summary>public CustomOptions Options { get; private set; }/// <summary>/// 構(gòu)造/// </summary>/// <param name="next"></param>public CustomMiddleWare(OwinMiddleware next): base(next){}/// <summary>/// 構(gòu)造/// </summary>/// <param name="middleware"></param>/// <param name="options"></param>public CustomMiddleWare(OwinMiddleware middleware, CustomOptions options): base(middleware){this.Options = options;}/// <summary>/// /// </summary>/// <param name="context"></param>/// <returns></returns>public override Task Invoke(Microsoft.Owin.IOwinContext context){var p = Options;context.Response.Write("<p>C<strong>ustomMiddleWare</strong>!This is an middleware!</p>");return Next.Invoke(context);//傳遞下一個中間件}} } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Owin; using MiddleWareApp.Extensions;/******************************************************************************************************************* * * 說 明: 授權(quán)(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 18:16:06* 修 改:2017-03-26 18:16:06* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.MiddleWare {/// <summary>/// 我們定義的第二個中間件/// </summary>public class StaticMiddleWare : MiddleWareBase<StaticOptions>{/// <summary>/// 構(gòu)造函數(shù)/// </summary>/// <param name="next"></param>/// <param name="options"></param>public StaticMiddleWare(OwinMiddleware next, StaticOptions options): base(next, options){}/// <summary>/// Invoke/// </summary>/// <param name="context"></param>/// <returns></returns>public override Task Invoke(IOwinContext context){context.Response.Write("<p><strong>StaticMiddleWare</strong>!This is a middleware.</p>");return Next.Invoke(context);//交給下一個中間件處理}} }為中間件,定義選項參數(shù),擴展給IAppBuilder類型方法
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Owin;/******************************************************************************************************************* * * 說 明: 授權(quán)(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 18:23:57* 修 改:2017-03-26 18:23:57* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.Extensions {/// <summary>/// <![CDATA[自定義擴展類]]>/// </summary>public static class CustomExtension{/// <summary>/// <![CDATA[使用自定義中間件]]>/// </summary>/// <param name="app"></param>/// <param name="options"></param>public static void UseCustomMiddleWare(this IAppBuilder app, CustomOptions options){app.Use(typeof(MiddleWare.CustomMiddleWare), options);//注意:Use方法是通過構(gòu)造函數(shù)注入到中間件中的}} } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MiddleWareApp.MiddleWare; using Owin;/******************************************************************************************************************* * * 說 明: 授權(quán)(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 18:46:32* 修 改:2017-03-26 18:46:32* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.Extensions {/// <summary>/// StaticExtension/// </summary>public static class StaticExtension{/// <summary>/// UseStaticMiddleWare/// </summary>/// <param name="app"></param>/// <param name="options"></param>public static void UseStaticMiddleWare(this IAppBuilder app, StaticOptions options){app.Use<StaticMiddleWare>(options);}} }定義兩個option對象:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;/******************************************************************************************************************* * * 說 明: 授權(quán)(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 18:25:12* 修 改:2017-03-26 18:25:12* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.Extensions {/// <summary>/// 自定義中間件,設(shè)置選項/// </summary>public class CustomOptions{/// <summary>/// 名稱/// </summary>public string Name { get; set; }} } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;/******************************************************************************************************************* * * 說 明: StaticOptions(版本:Version1.0.0)* 作 者:李朝強* 日 期: 2017-03-26 18:46:06* 修 改:2017-03-26 18:46:06* 參 考:http://my.oschina.net/lichaoqiang/ http://www.lichaoqiang.com* 備 注:暫無...* * * ***************************************************************************************************************/ namespace MiddleWareApp.Extensions {/// <summary>/// StaticOptions/// </summary>public class StaticOptions{} }? ? ? 至此,關(guān)于OWIN中間件的常見用法,介紹到此,看完,有沒有覺得OWIN中間件So easy!只要明白它的原理,怎么個玩法,看你的了!看代碼看的手癢癢的,動手試一試吧。
? ? ?更深一步的用法,不在此文中探討!
轉(zhuǎn)載于:https://my.oschina.net/lichaoqiang/blog/867927
總結(jié)
以上是生活随笔為你收集整理的OWIN之中间件用法示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Red Hat 6.5安装Oracle
- 下一篇: Python中dataframe数据框中