简体   繁体   中英

Custom AuthorizeAttribute

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:

[CheckArticleExistence(Id=articleId)]
public ActionResult Tags(int articleId)
{
...
}

I want to use the articleId to check if that article exists in the database, and if it doesn't I can trigger something different using the OnAuthorization method.

Is there any way? Thanks.

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))
        {
            ...
        }
    }
}

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
    }
}

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)
{
...
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM