我有一个名为CheckArticleExistence的AuthorizeAttribute子类。
我想使用我在动作中收到的参数设置一个属性。像这样:
[CheckArticleExistence(Id=articleId)]
public ActionResult Tags(int articleId)
{
...
}
我想使用articleId检查数据库中是否存在该文章,如果不存在,我可以使用OnAuthorization方法触发不同的内容。
有什么办法吗? 感谢。
答案 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)
{
...
}