gpt4 book ai didi

c# - 在验证上下文中使用 HttpRequest

转载 作者:行者123 更新时间:2023-12-04 00:03:53 27 4
gpt4 key购买 nike

在 .net Framework <= 4.7.2 中,在验证上下文中,您可以获得当前的 HttpRequest通过访问 HttpContext .

例如,我有一段代码如下所示:

public sealed class AccessValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext context)
{
// validate stuff, if all true -> yield ok.

// if is not valid
var request = HttpContext.Current.Request;

// store/log the request payload.
}

}

使用 .net Core 2.1 时无法做到这一点。
看到一篇关于注入(inject) IHttpContextAccessor的帖子什么的,但它几乎在每个地方都暴露了请求。

由于这是我服务器的外部库,我希望它不依赖服务器代码注入(inject),因为它会产生我不想成为的依赖。

有没有已知的方法来处理这个或解决这个问题?

最佳答案

您可以通过 IHttpContextAccessor 的组合来实现此目的。和 ValidationContext.GetService .这是它的样子:

protected override ValidationResult IsValid(object value, ValidationContext context)
{
// validate stuff, if all true -> yield ok.

// if is not valid
var httpContextAccessor = (IHttpContextAccessor)context.GetService(typeof(IHttpContextAccessor));
var request = httpContextAccessor.HttpContext.Request;

// store/log the request payload.
}

它不使用依赖注入(inject),而是使用服务定位器模式( considered an anti-pattern,但它可能是您唯一真正的选择)。

您还需要配置 IHttpContextAccessor使用 Startup.ConfigureServices 中的 DI 容器, 像这样:
services.AddHttpContextAccessor();

关于c# - 在验证上下文中使用 HttpRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933663/

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