Custom AuthorizeAttribute

前端 未结 3 1157
后悔当初
后悔当初 2020-12-19 18:58

I have a child class of AuthorizeAttribute named CheckArticleExistence.

I would like to set an attribute using the parameter that I receive in the action. Like this:

相关标签:
3条回答
  • 2020-12-19 19:27

    I think You can get the articleId from the AuthorizationContext, so you don't need to pass it as a property of the attribute.

    You can just do:

    [CheckArticleExistence]
    public ActionResult Tags(int articleId)
    {
    ...
    }
    
    0 讨论(0)
  • 2020-12-19 19:31

    You can put a method in your repository to check for the existence of an article.

    public ActionResult Tags(int articleId)
    {
        if (repository.ArticleExists(articleID))
        {
            // Do your thing
        }
        else
        {
            return view("NotFound"); // or do something else
        }
    }
    

    Or you can simply attempt to retrieve the article, and check for a null object.

    public ActionResult Tags(int articleId)
    {
        var article = repository.GetArticle();
        if (article !=null)
        {
            // Do your thing
        }
        else
        {
            return view("NotFound"); // or do something else
        }
    }
    
    0 讨论(0)
  • 2020-12-19 19:47

    This one worked (thanks!):

    [CheckArticleExistence]
    public ActionResult Tags(int articleId)
    {
        ...
    }
    
    ...
    
    public class CheckArticleExistenceAttribute : AuthorizeAttribute
    {
        private int articleId;
    
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
    
            this.articleId = int.Parse(filterContext.RouteData.Values["id"].ToString());
    
            if (!Article.Exists(articleId))
            {
                ...
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题