欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解在ASP.NET Core中如何編寫合格的中間件

 更新時間:2019年11月06日 15:04:55   作者:ZaraNet  
這篇文章主要介紹了詳解在ASP.NET Core中如何編寫合格的中間件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

這篇文章探討了讓不同的請求去使用不同的中間件,那么我們應(yīng)該如何配置ASP.NET Core中間件?其實中間件只是在ASP.NET Core中處理Web請求的管道。所有ASP.NET Core應(yīng)用程序至少需要一個中間件來響應(yīng)請求,并且您的應(yīng)用程序?qū)嶋H上只是中間件的集合。當(dāng)然MVC管道本身就是中間件,早在WebForm時代就出現(xiàn)過HttpModules、HttpHandler、那個時候悠然記得我通過它們來組織我的廣告系統(tǒng),不閑扯我們繼續(xù)。

每個中間件組件都有一個帶有HttpContext參數(shù)的Invoke方法。您可以使用這個參數(shù)來處理方法。

public async Task Invoke(HttpContext context)
{
 if (context.Request.Path...)
 {
  await context.Response.WriteAsync("writing text...");
 }
}

應(yīng)用程序中最頂層的中間件將始終針對每個請求被調(diào)用。這是由.NET框架自動完成的。中間件可以向客戶端發(fā)送響應(yīng),也可以調(diào)用下一個中間件。對于后一種選擇,它當(dāng)然需要訪問下一個中間件組件。這就是為什么大多數(shù)中間件組件都是使用帶有RequestDelegate參數(shù)的構(gòu)造函數(shù)定義的??傊?,RequestDelegate會自動填充,您無需在意。

中間件在Startup.cs的Configure方法中注冊。Configure方法具有IApplicationBuilder參數(shù),該參數(shù)提供了所有類型的中間件注冊所需的方法,我們試著去編寫一個中間件。

public class MyCustomMiddleware
 {
  private readonly RequestDelegate _next;
  public MyCustomMiddleware(RequestDelegate next)
  {
   _next = next;
  }
  public async Task Invoke(HttpContext context, IWebHostEnvironment env)
  {
   context.Response.Headers["app-name"] = env.ApplicationName+"Zaranet";
   context.Response.Headers["env-name"] = env.EnvironmentName+ "Zaranet";
   await _next(context);
  }
 }

隨后我們在Startup.cs的Configure方法中通過 use 來注冊自定義中間件。

public void Configure(IApplicationBuilder app, ...)
{
 app.UseMyCustomMiddleware();
}

啟動程序我們發(fā)現(xiàn)一些正常,我們得到了我們想要的效果。

 

但實際上,您很少需要直接調(diào)用UseMiddleware,因為中間件作者的標(biāo)準(zhǔn)方法是編寫特定于所注冊中間件的擴展方法:

using MiddlerWareSolucation.MiddlerWare;
using Microsoft.AspNetCore.Builder;

namespace MiddlerWareSolucation.MiddlerWare_Extensions
{
 public static class MyCustomMiddlewareExtensions
 {
  public static IApplicationBuilder UseMyCustomMiddleware(this IApplicationBuilder app)
  {
   app.UseMiddleware<MyCustomMiddleware>();

   return app;
  }
 }
}

隨后直接調(diào)用Extensions擴展方法,效果還是一樣的。

public void Configure(IApplicationBuilder app, ...)
{
 app.UseMyCustomMiddleware();
}

部分時候我們想要通過客戶端請求的路徑來對我們的中間件進(jìn)行啟動,當(dāng)然 MapWhen 允許您通過指定謂詞將中間件管道分成兩個完全獨立的分支:

app.UseMiddlewareOne();

app.MapWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
  appBuilder.UseMiddlewareTwo();
});

app.UseMiddlewareThree();

在此示例中,中間件One將始終執(zhí)行,如果請求路徑以“ / api”開頭,則將執(zhí)行中間件Two。否則,將執(zhí)行中間件Three。使用這種配置,中間件2和中間件3都無法針對單個請求執(zhí)行。

我想說的是最后一種情況是,您希望大多數(shù)中間件針對所有請求運行,但是您有一些條件件-特定中間件僅應(yīng)針對某些請求運行。

這可以通過UseWhen輕松實現(xiàn),UseWhen還使用謂詞來確定中間件是否應(yīng)該運行:

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
 appBuilder.UseStatusCodePagesWithReExecute("/apierror/{0}");

 appBuilder.UseExceptionHandler("/apierror/500");
});

這樣就可以通過選擇注冊方式來自己控制中間件。

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

相關(guān)文章

  • AspNetPager與Socut.Data使用方法

    AspNetPager與Socut.Data使用方法

    最近對AspNetPager與Socut.Data這兩個控件產(chǎn)生了濃厚的興趣,這兩個控件配合可以減輕很多程序員編寫代碼的壓力。ASpNetPager為分頁控件,而Socut.Data為數(shù)據(jù)操作控件,ACCESS,MSSQL都可以。
    2008-10-10
  • .net開發(fā)微信公眾平臺實例教程

    .net開發(fā)微信公眾平臺實例教程

    這篇文章主要介紹了.net開發(fā)微信公眾平臺的方法,對微信公眾平臺開發(fā)的原理與相應(yīng)的.net實現(xiàn)方法都做了較為詳細(xì)的講述,非常實用,需要的朋友可以參考下
    2014-10-10
  • Repeater對數(shù)據(jù)進(jìn)行格式化處理

    Repeater對數(shù)據(jù)進(jìn)行格式化處理

    最近不止一個同學(xué),問我在Repeater里怎么格式化數(shù)據(jù),怎么處理。因為Repeater 屬于服務(wù)器端控件。要么利用本身的控件事件來處理,要么在數(shù)據(jù)源上處理。
    2013-03-03
  • asp.net和ajax實現(xiàn)智能搜索功能代碼

    asp.net和ajax實現(xiàn)智能搜索功能代碼

    近來一直在開發(fā)股票模擬系統(tǒng),終于告一段落了,回想起來感慨很多。突然想應(yīng)該做點總結(jié)了,想來想去還是覺得通過寫點日志來把相關(guān)的知識點記錄下來,下面就我在項目中經(jīng)常用到的動態(tài)提示搜索選項功能的實現(xiàn)。
    2010-03-03
  • ASP .NET中執(zhí)行控件(如ImageButton、LinkButton等)命令不刷新頁面

    ASP .NET中執(zhí)行控件(如ImageButton、LinkButton等)命令不刷新頁面

    在操作時,很多時候希望提交命令之后不刷新頁面:1、防止頁面拉動,2、防止主框架中刷新丟失當(dāng)前運行的子界面。
    2009-03-03
  • Visual Studio 2017 15.5 正式發(fā)布!性能再提升

    Visual Studio 2017 15.5 正式發(fā)布!性能再提升

    Visual Studio 2017 15.5 正式發(fā)布!性能再提升,時發(fā)布的還有 Visual Studio for Mac 7.3,亮點如下
    2017-12-12
  • EF?Core的CRUD(增刪改查)基本操作

    EF?Core的CRUD(增刪改查)基本操作

    這篇文章介紹了EF?Core的CRUD(增刪改查)基本操作?,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應(yīng)的個體

    ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應(yīng)的個體

    這篇文章介紹了ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應(yīng)個體的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • C#下載文件(TransmitFile/WriteFile/流方式)實例介紹

    C#下載文件(TransmitFile/WriteFile/流方式)實例介紹

    C#下載文件想必很多業(yè)內(nèi)人士都不會陌生吧,C#下載文件方法很多,本文整理了一些,可供大家參考,感興趣的你可以研究下,或許本文所提供的知識點對你有所幫助
    2013-02-02
  • 自己常用到的自定義公共類(已測試通過)

    自己常用到的自定義公共類(已測試通過)

    自己常用到的自定義公共類(已測試通過)...
    2007-03-03

最新評論