Doi*_*del 2 c# asp.net-core asp.net-core-2.1 .net-core-2.1
我正在尝试在自定义的ValidationAttribute中访问当前用户(即,身份中的ClaimsPrincipal),但我还没有弄清楚该怎么做。
public class UniqueTitleValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// var user = ?
}
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以从HttpContext访问用户(但是我不知道如何访问后者)。
主要问题是我无权访问该用户。当我在属性上使用自定义ValidatorAttribute时,在构造属性时,User(或HttpContext)为null。这意味着我不能例如将User交给Validator的构造函数。这就是为什么我想知道如何使验证器了解有关用户(和/或其声明)的信息。如果我可以访问验证器中的HttpContext或User中的任何一个,那么我也可以获取所有其他运行时信息。我的问题可以理解吗?
ValidationContext具有自己的GetService方法,该方法预先配置为IServiceProvider在解析服务时使用ASP.NET Core依赖注入容器()。这是一个在您的情况下如何工作的示例:
public class UniqueTitleValidator : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
var httpContextAccessor = (IHttpContextAccessor)validationContext.GetService(typeof(IHttpContextAccessor));
var user = httpContextAccessor.HttpContext.User;
...
}
}
Run Code Online (Sandbox Code Playgroud)
为了到达HttpContext,您可以使用IHttpContextAccessor,GetService如上所述使用来解决,(您需要确保已使用DI将其注册到DI中AddHttpContextAccessor)。
| 归档时间: |
|
| 查看次数: |
645 次 |
| 最近记录: |