簡體   English   中英

如何將原始數據傳遞給asp.net核心中間件

[英]How to pass primitive data to asp.net core middleware

我需要將一些數據傳遞到ASP NET CORE中間件

例如,如果這是一個字符串列表,您是否使用與傳入服務相同的機制?

例如,將它作為參數添加到Invoke方法並將其注冊到DI?

如果是這樣,你如何注冊原始類型? 例如一個字符串。 它必須是一個命名類型或類似的東西?

或者我們可以通過其他方式傳遞數據嗎?

謝謝

我們假設我們有一個中間件:

public class FooMiddleware
{
    public FooMiddleware(RequestDelegate next, List<string> list)
    {
        _next = next;
    }
}

只需將列表傳遞給UseMiddleware調用即可解析每個中間件

app.UseMiddleware<FooMiddleware>(new List<string>());

你可以創建一個DTO並傳遞它:

public FooMiddleware(RequestDelegate next, Payload payload)
....
app.UseMiddleware<FooMiddleware>(new Payload());    

或者在DI容器中注冊此DTO,它將在中間件中解決:

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<Payload>(new Payload());
}

此外,DI容器允許解析每個請求的依賴項:

public async Task Invoke(HttpContext httpContext, IMyScopedService svc)
{
    svc.MyProperty = 1000;
    await _next(httpContext);
}

文檔:

由於中間件是在應用程序啟動時構建的,而不是按請求構建的,因此中間件構造函數使用的作用域生存期服務在每個請求期間不會與其他依賴注入的類型共享。 如果必須在中間件和其他類型之間共享作用域服務,請將這些服務添加到Invoke方法的簽名中。 Invoke方法可以接受依賴注入填充的其他參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM