gpt4 book ai didi

c# - 将自定义身份验证过滤器中的请求特定对象共享到 Controller /模型

转载 作者:行者123 更新时间:2023-11-30 23:29:15 26 4
gpt4 key购买 nike

我的 API 的自定义身份验证从数据库中填充一个实体。我如何与我的 Controller 共享这个特定于请求的对象(在下面的例子中是“映射”),这样我就不必为相同的信息查询数据库两次?

public class CustomAuth : Attribute, IAuthenticationFilter, IDisposable
{
public async Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken){
var query = _readEntities.Query<API_Exe_Mapping>();
var mapping = await query.FirstOrDefaultAsync(...);
...
}

最佳答案

使用 HttpRequestMessage.Properties

您可以像这样使用 HttpRequesteMessage.Properties 属性:

public async Task AuthenticateAsync(HttpAuthenticationContext context, System.Threading.CancellationToken cancellationToken)
{
// your code here
context.Request.Properties["MyDataKey"] = new List<string> { "from my properties" };
}

然后在您的 Controller 中,您只需使用以下代码:

var data = this.ActionContext.Request.Properties["MyDataKey"];

针对每个 http 请求清理集合。

使用 HttpContext.Current.Items

您可以使用以下解决方案之一,它将使用静态属性 HttpContext.Current.Items

public async Task AuthenticateAsync(HttpAuthenticationContext context, System.Threading.CancellationToken cancellationToken)
{
// your code here
HttpContext.Current.Items["MyDataKey"] = new List<string> { "from my items" };
}

然后在您的 Controller 中,您只需检查相同的字典集合 HttpContext.Current.Items 并使用相同的键检索数据。 Items 集合将在 http 请求终止时被清除。

关于c# - 将自定义身份验证过滤器中的请求特定对象共享到 Controller /模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35588592/

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