[译]ASP.NET Core 2.0 带初始参数的中间件
問題
如何在ASP.NET Core 2.0向中間件傳入初始參數(shù)?
答案
在一個空項目中,創(chuàng)建一個POCO(Plain?Old?CLR?Object)來保存中間件所需的參數(shù):
public class GreetingOptions { ? ?? public string GreetAt { get; set; } ?
??public string GreetTo { get; set; } }
添加一個中間件:
??private readonly RequestDelegate _next; ?
??private readonly GreetingOptions _options; ?
?public GreetingMiddleware(RequestDelegate next, GreetingOptions options){_next = next;_options = options;} ?
?public async Task Invoke(HttpContext context){ ? ? ?
? ? ? var message = $"Good {_options.GreetAt} {_options.GreetTo}"; ? ?
? ? ??await context.Response.WriteAsync(message);} }
答案1:實例類型
添加一個擴展方法來配置中間件:
public static IApplicationBuilder UseGreetingMiddleware(this IApplicationBuilder app, GreetingOptions options) { ? ?return app.UseMiddleware<GreetingMiddleware>(options); }使用中間件:
public void Configure(IApplicationBuilder app, IHostingEnvironment env) {app.UseGreetingMiddleware(new GreetingOptions {GreetAt = "Morning",GreetTo = "Tahir"}); }答案2:函數(shù)類型
添加一個擴展方法來配置中間件:
?var options = new GreetingOptions();optionsAction(options); ?
?return app.UseMiddleware<GreetingMiddleware>(options); }
使用中間件:
上述兩種方法結(jié)果一致。
運行,此時頁面顯示:
討論
之前我們曾討論過,在單獨的類中定義中間件并使用擴展方法將其添加到請求管道中是最佳實踐。我們也可能需要向中間件傳入?yún)?shù),通過對ASP.NET Core源代碼以及其他在線示例的學(xué)習(xí),我總結(jié)出來上面兩種模式。
上述的兩種解決方法都非常直觀。我們將參數(shù)封裝到一個POCO類中,然后創(chuàng)建一個擴展方法來接受下面的參數(shù):
1.?POCO實例
2.?需要調(diào)用的函數(shù)(在函數(shù)內(nèi)設(shè)置POCO)
注:POCO實例通過構(gòu)造函數(shù)傳入中間件。UseMiddleware()方法接收可變參數(shù)params object[],并將這些參數(shù)傳入中間件構(gòu)造函數(shù)。
配置服務(wù)
這些模式也能用于向服務(wù)容器中添加服務(wù)實例。為了便于說明,我們先添加一個服務(wù):
public interface IMessageService { ??string FormatMessage(string message); }
public class MessageService : IMessageService { ?
?private readonly GreetingOptions _options;
? ?public MessageService(GreetingOptions options){_options = options;} ? ?
public string FormatMessage(string message){ ? ? ? ?return $"Good {_options.GreetAt} {_options.GreetTo} - {message}";} }
添加如下任一個擴展方法來配置服務(wù):
在Configure()中使用此服務(wù):
因為ConfigureServices()先于Configure()執(zhí)行,因此我們可以直接在Configure()注入此服務(wù):
運行,此時頁面顯示:
?
?
源代碼下載
?
原文:https://tahirnaushad.com/2017/08/29/passing-parameters-to-middleware-in-asp-net-core-2-0/
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的[译]ASP.NET Core 2.0 带初始参数的中间件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABP从入门到精通(1):aspnet-
- 下一篇: 框架学习与探究之AOP--Castle