gpt4 book ai didi

c# - 用另一个覆盖授权过滤器

转载 作者:太空狗 更新时间:2023-10-29 23:50:25 26 4
gpt4 key购买 nike

我在我的 Web Api 项目中定义了一个默认的 CustomAuthorizeAttribute

config.Filters.Add(new CustomAuthorizeAttribute());

但是我有一个特殊的 Controller ,我想在其中使用 SpecialAuthorizeAttribute

[SpecialAuthorize]
public class MySpecialController : ApiController

在 Asp.Net vNext 中,我们有一个新属性来覆盖默认过滤器,但我如何才能让它在 Web Api 2 中工作?

编辑 1:

一个可能(但不理想)的解决方案是让 CustomAuthorizeAttribute 检查在 Controller 或 Action 的范围内是否还有另一个 AuthorizeAttribute。在我的例子中,我只有 SpecialAuthorizeAttribute 所以:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<SpecialAuthorizeAttribute>().Any() || actionContext.ActionDescriptor.GetCustomAttributes<SpecialAuthorizeAttribute>().Any())
{
return;
}
base.OnAuthorization(actionContext);
}

public override System.Threading.Tasks.Task OnAuthorizationAsync(System.Web.Http.Controllers.HttpActionContext actionContext, System.Threading.CancellationToken cancellationToken)
{
return base.OnAuthorizationAsync(actionContext, cancellationToken);
}
}

最佳答案

您可以使用 OverrideAuthenticationAttribute .尽你所能this answer此属性用于抑制全局身份验证过滤器。

关于c# - 用另一个覆盖授权过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31878663/

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