我需要将一些数据传递到 ASP NET CORE 中间件
例如如果这是一个字符串列表,您是否使用与传递服务相同的机制?
例如将其作为参数添加到 Invoke 方法中并向 DI 注册?
如果是这样,您如何进行原始类型的注册?例如字符串列表。它必须是命名类型或类似的东西吗?
或者我们可以通过其他方式传递数据吗?
thanks
假设我们有一个中间件:
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);
}
文档: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware#writing-middleware
因为中间件是在应用程序启动时构建的,而不是根据请求构建的,scoped在每个请求期间,中间件构造函数使用的生命周期服务不会与其他依赖项注入类型共享。如果
你必须分享一个scoped您的中间件和其他中间件之间的服务
类型,将这些服务添加到Invoke
方法的签名。这Invoke
方法可以接受由以下填充的附加参数
依赖注入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)