自定义AuthorizeAttribute

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

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

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

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

有什么办法吗? 谢谢。

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

你可以这样做:

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

这个工作了(谢谢!):

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

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

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