在前一篇文章 [料理佳餚] ASP.NET Core 的虛擬目錄哪去了?中有提到,傳統 ASP.NET 的 HTTP Handler 及 HTTP Modules 的工作在 ASP.NET Core 是由 Middleware 來負責處理,這篇文章就來介紹撰寫 Middleware 的幾種方式。
Use() 方法
第一種最直接的方式就是在 Configure() 方法裡面,直接用 app.Use()
撰寫,假定我想要在每一個網頁的最下方帶一個 Made by Johnny
的註解,Middleware 就可以這樣寫:
效果如下:
Middleware 類別
第二種方式是建立一個專門的類別,這個類別至少需要注入一個 RequestDelegate
的物件,以及 public Task Invoke(HttpContext context) { }
或 public Task InvokeAsync(HttpContext context) { }
方法,相同的範例,程式碼如下:
public class SignatureMiddleware
{
private readonly RequestDelegate next;
public SignatureMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task InvokeAsync(HttpContext context)
{
await this.next.Invoke(context);
if (Regex.IsMatch(context.Response.ContentType, "text/html", RegexOptions.IgnoreCase))
{
await context.Response.WriteAsync("<!--Made by Johnny-->");
}
}
}
接著在 Configure() 方法中,加入 app.UseMiddleware<SignatureMiddleware>()
就可以了。
搭配擴充方法
我們可以將上述兩種方式使用擴充方法加以包裝,在使用上就會更簡潔一點,這也會方便我們帶參數進去。