gpt4 book ai didi

c# - ActionContext.ActionArguments 在 IAuthenticationFilter 中为空

转载 作者:太空宇宙 更新时间:2023-11-03 21:30:35 25 4
gpt4 key购买 nike

背景:

我想使用通过 Ninject 注入(inject)的 IAuthenticationFilter 实现来验证对我的 Web API 的 POST 请求。要验证请求,我需要访问请求正文。

问题:

ActionContext.ActionArguments,我通常用来访问请求有效负载,当我尝试在过滤器内部访问它时,它是空的。

问题:

  1. 如何在 IAuthenticationFilter 实现中访问 POST 请求负载?
  2. 为什么 ActionContext.ActionArgumentsIAuthenticationFilter 实现中是空的,但如果我的过滤器实现了 ActionFilterAttribute 则有值?

代码:

过滤器实现:

public class AuthenticateFilter : IAuthenticationFilter
{
private const string AuthenticationHeader = "X-Auth-Token";
private const string UserHeader = "X-Auth-User";

private readonly ILog log;

public AuthenticateFilter(ILog log)
{
this.log = log;
}

public Task AuthenticateAsync(HttpAuthenticationContext context,
CancellationToken cancellationToken)
{
// context.ActionContext.ActionArguments is empty

if (!IsAuthenticated(context))
{
context.ErrorResult =
new StatusCodeResult(HttpStatusCode.Unauthorized,
context.Request);
}

return Task.FromResult(0);
}

public Task ChallengeAsync(HttpAuthenticationChallengeContext context,
CancellationToken cancellationToken)
{
context.Result =
new StatusCodeResult(HttpStatusCode.Unauthorized,
context.Request);

return Task.FromResult(0);
}

private bool IsAuthenticated(HttpAuthenticationContext context)
{
// Authentication code here
// context.ActionContext.ActionArguments is empty
}
}

当 Controller 方法具有属性时,使用 Ninject 注入(inject)过滤器。

kernel.BindHttpFilter<AuthenticateFilter>(FilterScope.Action)
.WhenActionMethodHas<AuthenticateAttribute>();

AuthenticateAttribute 是一个空的 ActionFilterAttribute

public class AuthenticateAttribute : ActionFilterAttribute
{

}

谢谢!

最佳答案

这是预期的行为。 AuthenticationAuthorization 过滤器在 ModelBinding/Formatter 反序列化阶段之前运行,而 Action 过滤器在该阶段之后运行。

关于c# - ActionContext.ActionArguments 在 IAuthenticationFilter 中为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24493425/

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