.NET Core 中間件
阿新 • • 發佈:2019-02-02
ret return response async 是否 rtu 16px 組件 生成
中間件是一種裝配到應用管道以處理請求和響應的軟件。 每個組件:
1.選擇是否將請求傳遞到管道中的下一個組件。
2.可在管道中的下一個組件前後執行工作。
請求委托用於生成請求管道。 請求委托處理每個 HTTP 請求。
使用 RunMap 和 Use 擴展方法來配置請求委托。 可將一個單獨的請求委托並行指定為匿名方法(稱為並行中間件),或在可重用的類中對其進行定義。 這些可重用的類和並行匿名方法即為中間件,也叫中間件組件。 請求管道中的每個中間件組件負責調用管道中的下一個組件,或使管道短路。
使用 IApplicationBuilder 創建中間件管道
ASP.NET Core 請求管道包含一系列請求委托,依次調用。 下圖演示了這一概念。 沿黑色箭頭執行。
每個委托均可在下一個委托前後執行操作。 此外,委托還可以決定不將請求傳遞給下一個委托,這就是對請求管道進行短路。 通常需要短路,因為這樣可以避免不必要的工作。 例如,靜態文件中間件可以返回靜態文件請求並使管道的其余部分短路。 先在管道中調用異常處理委托,以便它們可以捕獲在管道的後期階段所發生的異常。
新建一個類RequestIPMiddleware獲取ip地址
using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging;View Codepublic class RequestIPMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public RequestIPMiddleware(RequestDelegate next, ILoggerFactory loggerFactory) { _next = next; _logger = loggerFactory.CreateLogger<RequestIPMiddleware>(); }public async Task Invoke(HttpContext context) { _logger.LogInformation("User IP------->" + context.Connection.RemoteIpAddress.ToString()); await context.Response.WriteAsync("IP----->"+context.Connection.RemoteIpAddress.ToString() +"\n"); await _next.Invoke(context); } }
創建類RequestIPExtensions
using Microsoft.AspNetCore.Builder; public static class RequestIPExtensions { public static IApplicationBuilder UseRequestIP(this IApplicationBuilder builder) { return builder.UseMiddleware<RequestIPMiddleware>(); } }View Code
然後在Startup類中的Configure方法中調用
loggerfactory.AddConsole(minLevel: LogLevel.Information); app.UseRequestIP(); //使用Ip中間件 app.Run(async context =>{ await context.Response.WriteAsync("Hello world !"); });
參考 https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-2.1
.NET Core 中間件