【问题标题】:Custom Attribute with optional parameter带有可选参数的自定义属性
【发布时间】:2015-09-18 17:47:42
【问题描述】:

我有这个自定义属性(自定义 MVC 授权):

public class CustomAuthorizeAttribute : AuthorizationFilterAttribute
{
    public string Users { get; set; } //its always null!

    public override void OnAuthorization(HttpActionContext actionContext)
    {
        string user = Thread.CurrentPrincipal.Identity.Name.Split('\\')[1];

        AdProxy AdProxy = new AdProxy();

        if (!AdProxy.IsUserInGroup(user, Users))
        {
            actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);

        }
    }

}

我是这样使用的:

[CustomAuthorizeAttribute(Users = "Admin")]

但在调试时“用户”的值始终为空。 有什么想法吗?

【问题讨论】:

  • 首先我认为您忘记了您班级中的用户不是base.Users。可能您缺少带有 optional parameter 的构造函数,它覆盖了 base.Users 属性,或者只是通过您的父构造函数填充它。
  • 什么意思?你能写 ctor plz 吗?根据这个链接:dotnet-tricks.com/Tutorial/mvc/…我不用添加ctor和填充参数

标签: c# asp.net asp.net-mvc custom-attributes


【解决方案1】:

如果您使用 .net Framework 4.5.1 更改为 4.5,它应该可以工作。

class CustomAuthorizeAttribute : AuthorizeAttribute
{
    public string Users { get; set; }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {

        base.OnAuthorization(filterContext);
    }
}

【讨论】:

    【解决方案2】:

    试试这个:

     public class CustomAuthorizeAttribute : AuthorizeAttribute
     { ... }
    

    【讨论】:

    • 它现在应该可以工作了。 AuthorizeAttribute 中有拼写错误 - 没有 AuthorizationFilterAttribute。只有 Authorize 本身包含用户属性的属性。
    猜你喜欢
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2020-02-14
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 2011-10-17
    • 2020-12-04
    相关资源
    最近更新 更多