C# 如何根据条件使用属性。(通过标志禁用)

C# 如何根据条件使用属性。(通过标志禁用),c#,asp.net-web-api2,custom-attributes,C#,Asp.net Web Api2,Custom Attributes,我用的是“授权” 发件人:System.Web.Http 属性位于基本控制器 问题是我需要根据条件使用它 (假设我有一个不需要身份验证/授权的模式) 我怎样才能做到呢 谢谢。一种方法是重写authorized属性,并在其中添加自定义逻辑。 这里我们有两种情况,如果您想将其与MVC控制器一起使用,请覆盖AuthorizeCore()方法并使用System.Web.MVC名称空间,如下所示: public class MyCustomAuthorizeAttribute: AuthorizeAttr

我用的是“授权” 发件人:
System.Web.Http

属性位于基本控制器

问题是我需要根据条件使用它

(假设我有一个不需要身份验证/授权的模式)

我怎样才能做到呢


谢谢。

一种方法是重写
authorized属性,并在其中添加自定义逻辑。
这里我们有两种情况,如果您想将其与
MVC
控制器一起使用,请覆盖
AuthorizeCore()
方法并使用
System.Web.MVC
名称空间,如下所示:

public class MyCustomAuthorizeAttribute: AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authorized = base.AuthorizeCore(httpContext);
        bool isExceptionalCase = GetIfExceptional();//Assuming here where you look for some other condition other than user is authorized
        if (!isExceptionalCase && !authorized)
        {
            // The user is not authorized => no need to go any further
            return false;
        }

        return true;
    }
}
第二种情况是,您将在WebApi控制器中使用它,您可以替代
IsAuthorized()
,并使用
System.Web.Http
命名空间:

public class MyCustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
    {
        var authorized = base.IsAuthorized(actionContext);
        bool isExceptionalCase = GetIfExceptional();//Assuming here where you look for some other condition other than user is authorized
        if (!isExceptionalCase && !authorized)
        {
            // The user is not authorized => no need to go any further
            return false;
        }

        return true;
    }
}
然后在动作或控制器上使用自定义属性,而不是使用标准属性:

[MyCustomAuthorize]
public ActionResult MyAction()
{
    ...
}

您可以在特定方法或控制器中使用AllowAnonymousAttribute来“覆盖”在基本控制器中使用的AuthorizeAttribute

检查参考:

作为另一个选项,您可以创建自定义属性并在基本控制器中使用它。通过这种方式,您可以在自定义属性中添加决策所需的所有逻辑

检查参考:


你好,洛杉矶。

hi-你的意思是要覆盖已授权的受保护覆盖布尔吗(HttpActionContext actionContext)?
覆盖布尔授权核心
对你不起作用@user10776203i正在查找@System.Web.Http版本5.2.3.0,但没有看到这样的情况method@user10776203查看更新的答案,希望对您有所帮助