目前我们正在使用 dotnet core 2 编写一个 Web 应用程序。
我们实际上创建了某种多托管平台,可以根据传递到应用程序的 URL 注册新客户端。
然而目前我们想要创建一个中间件/过滤器来验证我们的客户端。
实际上我们想要做的是从数据库中提取一个对象并检查它是否存在,如果存在,我们想要调用控制器方法并使该对象可访问,如果不存在,我们实际上想要中止并显示错误页。
我们已经做的是创建一个过滤器/中间件来完成这个任务,但是我们无法找到一种方法来访问我们已经在控制器方法内的过滤器/中间件中提取的对象。
实际上有任何文档可以做到这一点吗?
我实际上试图从以下方面弄清楚:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware?tabs=aspnetcore2x
https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/filters
但他们没有描述一种方法,只是在操作之前/之后实际做一些事情。
您可以使用以下方法将对象添加到上下文中HttpContext.Items文档指出:
Items 集合是存储仅在处理一个特定请求时所需的数据的好位置。每次请求后都会丢弃集合的内容。 Items 集合最适合用作组件或中间件在请求期间的不同时间点运行且没有直接传递参数的方式时进行通信的方式。
例如,在您的中间件中:
public class MySuperAmazingMiddleware
{
private readonly RequestDelegate _next;
public MySuperAmazingMiddleware(RequestDelegate next)
{
_next = next;
}
public Task Invoke(HttpContext context)
{
var mySuperAmazingObject = GetSuperAmazingObject();
context.Items.Add("SuperAmazingObject", mySuperAmazingObject );
// Call the next delegate/middleware in the pipeline
return this._next(context);
}
}
然后稍后在您的操作方法中,您可以读取该值:
var mySuperAmazingObject = (SuperAmazingObject)HttpContext.Items["mySuperAmazingObject"];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)