gpt4 book ai didi

C# dotnet core 2 将数据从中间件/过滤器传递到 Controller 方法

转载 作者:太空狗 更新时间:2023-10-29 19:56:48 26 4
gpt4 key购买 nike

目前我们正在使用 dotnet core 2 编写一个网络应用程序。

我们实际上创建了某种多主机平台,我们可以在其中根据传递给我们应用程序的 url 注册新客户端。

但是目前我们想创建一个中间件/过滤器来验证我们客户的。

实际上我们想做的是从数据库中拉取一个对象并检查它是否存在,如果存在,我们要调用 Controller 方法并使该对象可访问,如果不存在,我们实际上要中止并显示错误页面。

我们已经完成的工作是创建一个过滤器/中间件来执行此操作,但是我们无法找到一种方法来访问我们已经在 Controller 方法中的过滤器/中间件中提取的对象。

真的有任何文档可以做到这一点吗?

我实际上试图从以下方面找出答案: 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 将对象添加到上下文中文档说明:

The Items collection is a good location to store data that is needed only while processing one particular request. The collection's contents are discarded after each request. The Items collection is best used as a way for components or middleware to communicate when they operate at different points in time during a request and have no direct way to pass parameters.

例如,在你的中间件中:

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"];

关于C# dotnet core 2 将数据从中间件/过滤器传递到 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46601757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com