gpt4 book ai didi

c# - 为一种方法覆盖 MVC 中的全局过滤器

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

在我的 filterConfig 中,我注册了一个全局属性过滤器,它需要对我的每个方法进行授权。

但是,我有一个特定的方法,我想在其中应用不同的授权过滤器属性。如果可能的话,如何做到这一点?

注意:我不想使用 [AllowAnonymous] 属性(它可以无缝工作并完全忽略我的过滤器),因为我希望请求得到授权,只是通过方法上的一组不同的授权逻辑。

最佳答案

您可以通过在属性类的 AttributeUsage 属性中设置 AllowMultiple = true 来更改您的过滤器以允许多个过滤器,并添加检查以便过滤器是否存在多次,全局应用的不执行。传递到 OnActionExecuting()ActionExecutingContext 让您可以通过 filterContext.ActionDescriptor.GetCustomAttributes() 应用过滤器,因此您可以使用它在这里。

然后,更改构造函数,以便您可以传入一个参数(可能是一个枚举),它可以使用该参数来决定使用哪种授权方法 - 普通方法还是另一种方法。给该参数一个默认值,使其选择正常的身份验证方法。然后,在需要不同身份验证方法的那个方法上,您可以使用参数的另一个值应用过滤器。所以它可能看起来像这样:

public class CustomAuthAttribute : AuthorizeAttribute
{
public CustomAuthAttribute(AuthMethod method = AuthMethod.StandardAuth)
{
//stuff
}
}

[CustomAuth(AuthMethod.WeirdAuth)]
public ActionResult MethodThatNeedsDifferentAuth()
{
//stuff
}

关于c# - 为一种方法覆盖 MVC 中的全局过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15664553/

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