自定义AuthorizeAttribute

时间:2009-09-26 20:40:18

标签: c# asp.net-mvc

我有一个名为CheckArticleExistence的AuthorizeAttribute子类。

我想使用我在动作中收到的参数设置一个属性。像这样:

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

我想使用articleId检查数据库中是否存在该文章,如果不存在,我可以使用OnAuthorization方法触发不同的内容。

有什么办法吗? 感谢。

3 个答案:

答案 0 :(得分:5)

这个有效(谢谢!):

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

答案 1 :(得分:3)

您可以在存储库中放置一个方法来检查文章是否存在。

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

或者您可以简单地尝试检索文章,并检查空对象。

public ActionResult Tags(int articleId)
{
    var article = repository.GetArticle();
    if (article !=null)
    {
        // Do your thing
    }
    else
    {
        return view("NotFound"); // or do something else
    }
}

答案 2 :(得分:3)

我认为您可以从 AuthorizationContext 获取 articleId ,因此您无需将其作为属性的属性传递。

你可以这样做:

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