亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺談ASP.NET Core 2.0 中間件(譯)

 更新時(shí)間:2017年10月23日 16:38:11   作者:三生石上(FineUI控件)  
這篇文章主要介紹了淺談ASP.NET Core 2.0 中間件,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

問題

如何創(chuàng)建一個(gè)最簡單的ASP.NET Core中間件?

答案

使用VS創(chuàng)建一個(gè)ASP.NET Core 2.0的空項(xiàng)目,注意Startup.cs中的Configure()方法:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync("Hello World! (Run)");
  });
}

比較好的創(chuàng)建請求管道的方法是使用IApplicationBuilder上的擴(kuò)展方法:

public static void RunHelloWorld(this IApplicationBuilder app)
{
  app.Run(async (context) =>
  {
    await context.Response.WriteAsync("Hello World! (Run)");
  });
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.RunHelloWorld();
}

運(yùn)行,此時(shí)頁面顯示:

上面我們使用IApplicationBuilder.Run()來配置中間件,另外一種方法是IApplicationBuilder.Use():

public static void UseHelloWorld(this IApplicationBuilder app)
{
  app.Use(async (context, next) =>
  {
    await context.Response.WriteAsync("Hello World! (Use)\n");
    await next();
  });
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseHelloWorld();
  app.RunHelloWorld();
}

運(yùn)行,此時(shí)頁面顯示:

將中間件作為單獨(dú)的類定義是更好的實(shí)踐方法:

public class HelloWorldMiddleware
{
  private readonly RequestDelegate _next;

  public HelloWorldMiddleware(RequestDelegate next)
  {
    _next = next;
  }

  public async Task Invoke(HttpContext context)
  {
    await context.Response.WriteAsync("Hello World! (Use in Class)\n");
    await _next(context);
  }
}


public static class UseHelloWorldInClassExtensions
{
  public static IApplicationBuilder UseHelloWorldInClass(this IApplicationBuilder app)
  {
    return app.UseMiddleware<HelloWorldMiddleware>();
  }
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseHelloWorld();
  app.UseHelloWorldInClass();
  app.RunHelloWorld();
}

運(yùn)行,此時(shí)頁面顯示:

討論

中間件是一個(gè)攔截HTTP請求和響應(yīng)消息的組件。我們通過創(chuàng)建這些組件鏈,來為我們的應(yīng)用程序創(chuàng)建一個(gè)請求管道。

我們通過Configure()方法的IApplicationBuilder參數(shù)來創(chuàng)建這個(gè)請求管道,IApplicationBuilder參數(shù)有如下方法:

  1. Run():添加中間件并終止請求管道(也就是說不再調(diào)用下一個(gè)中間件)。
  2. Use():添加中間件,使用lambda表達(dá)式或者一個(gè)具體的類。
  3. Map():根據(jù)請求路徑添加中間件。

Run

這個(gè)方法接受RequestDelegate委托作為參數(shù),當(dāng)委托方法被調(diào)用時(shí)接受HttpContext參數(shù)。這個(gè)委托方法返回void,因?yàn)樗鼤K止請求管道。

Use

這個(gè)方法接受Func委托作為參數(shù),此委托方法有兩個(gè)參數(shù),分別是HttpContext和指向下一個(gè)中間件的next,返回空(Task)。如果沒有調(diào)用下一個(gè)中間件,就會終止請求管道(和Run效果一樣)。

UserMiddleware

當(dāng)通過單獨(dú)類創(chuàng)建中間件時(shí),我們使用UseMiddleware方法,并將具體的實(shí)現(xiàn)類型作為泛型參數(shù)。

在中間件類中,有兩個(gè)部分很重要:

1. 構(gòu)造函數(shù)接受RequestDelegate。當(dāng)調(diào)用此委托時(shí)會將當(dāng)前請求傳入下一個(gè)中間件。

2. 它擁有一個(gè)Invoke方法,接收HttpContext參數(shù)并返回空(Task)。當(dāng)需要用到中間件時(shí),框架會主動調(diào)用這個(gè)方法。

注:在單獨(dú)類中實(shí)現(xiàn)中間件,并用UseMiddleware封裝起來是最佳實(shí)踐。

擴(kuò)展方法

需要注意擴(kuò)展方法的不同之處,RunXXX不會返回值,而UseXXX會返回值(IApplicationBuilder)。這是因?yàn)镽un()終止請求管道,而Use()可能會鏈接到其他的中間件。

順序

中間件按照它們在Configure()方法出現(xiàn)的順序依次被調(diào)用。而返回到客戶端的響應(yīng)也會經(jīng)歷相同的中間件管道。

源代碼下載

原文:https://tahirnaushad.com/2017/08/14/asp-net-core-middleware/

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何取消.net后臺線程的執(zhí)行

    如何取消.net后臺線程的執(zhí)行

    在使用多線程模型進(jìn)行編程時(shí),經(jīng)常遇到的問題之一是,當(dāng)我們關(guān)閉前臺的UI線程時(shí),后臺的輔助線程仍然處于活動狀態(tài),從而導(dǎo)致整個(gè)應(yīng)用程序無法正常退出
    2012-11-11
  • ASP.NET 窗體間傳值的方法

    ASP.NET 窗體間傳值的方法

    這篇文章介紹了ASP.NET 窗體間傳值的方法,有需要的朋友可以參考一下,希望對你有所幫助
    2013-07-07
  • .NET 6開發(fā)TodoList應(yīng)用引入數(shù)據(jù)存儲

    .NET 6開發(fā)TodoList應(yīng)用引入數(shù)據(jù)存儲

    這篇文章主要介紹了.NET 6開發(fā)TodoList應(yīng)用引入數(shù)據(jù)存儲,本篇文章僅完成了數(shù)據(jù)存儲服務(wù)的配置工作,目前還沒有添加任何實(shí)體對象和數(shù)據(jù)庫表定義,所以暫時(shí)沒有可視化的驗(yàn)證,僅我們可以運(yùn)行程序看我們的配置是否成功:下面來看詳細(xì)內(nèi)容吧

    2021-12-12
  • ASP.NET Core Web App應(yīng)用第三方Bootstrap模板的方法教程

    ASP.NET Core Web App應(yīng)用第三方Bootstrap模板的方法教程

    這篇文章主要給大家介紹了關(guān)于ASP.NET Core Web App應(yīng)用第三方Bootstrap模板的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起看看吧
    2018-06-06
  • .Net MVC網(wǎng)站中配置文件的讀寫

    .Net MVC網(wǎng)站中配置文件的讀寫

    這篇文章主要為大家詳細(xì)介紹了.Net MVC 網(wǎng)站中配置文件的讀寫,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Json數(shù)據(jù)轉(zhuǎn)換list對象實(shí)現(xiàn)思路及代碼

    Json數(shù)據(jù)轉(zhuǎn)換list對象實(shí)現(xiàn)思路及代碼

    本文為大家詳細(xì)介紹下Json數(shù)據(jù)轉(zhuǎn)換list對象的具體實(shí)現(xiàn),感興趣的朋友可以參考下哈,希望對你有所幫助
    2013-04-04
  • ASP.NET MVC擴(kuò)展HtmlHelper方法

    ASP.NET MVC擴(kuò)展HtmlHelper方法

    這篇文章介紹了ASP.NET MVC擴(kuò)展HtmlHelper的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • 使用ajax局部刷新gridview進(jìn)行數(shù)據(jù)綁定示例

    使用ajax局部刷新gridview進(jìn)行數(shù)據(jù)綁定示例

    很多用戶都有這樣需求,比如:點(diǎn)擊按鈕,刷新 GridView 中的數(shù)據(jù),而不是這個(gè)頁面刷新。使用簡單的 XMLHttpRequest就可以直接實(shí)現(xiàn)
    2014-02-02
  • .net6環(huán)境下使用RestSharp請求GBK編碼網(wǎng)頁亂碼的解決方案

    .net6環(huán)境下使用RestSharp請求GBK編碼網(wǎng)頁亂碼的解決方案

    這篇文章介紹了.net6環(huán)境下使用RestSharp請求GBK編碼網(wǎng)頁亂碼的解決方案,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • .NET?Core控制臺應(yīng)用ConsoleApp讀取appsettings.json配置文件

    .NET?Core控制臺應(yīng)用ConsoleApp讀取appsettings.json配置文件

    這篇文章介紹了.NET?Core控制臺應(yīng)用ConsoleApp讀取appsettings.json配置文件的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評論