我有一个继承自AuthorizeAttribute的子类,名为CheckArticleExistence。
我想使用在action中接收到的参数来设置属性。就像这样:
[CheckArticleExistence(Id=articleId)]
public ActionResult Tags(int articleId)
{
...
}
我希望使用文章ID检查数据库中是否存在该文章,如果不存在,我可以使用OnAuthorization方法触发其他操作。
有没有办法实现这个需求呢? 谢谢。
我有一个继承自AuthorizeAttribute的子类,名为CheckArticleExistence。
我想使用在action中接收到的参数来设置属性。就像这样:
[CheckArticleExistence(Id=articleId)]
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
}
}
或者您可以尝试检索文章并检查是否为null对象。
public ActionResult Tags(int articleId)
{
var article = repository.GetArticle();
if (article !=null)
{
// Do your thing
}
else
{
return view("NotFound"); // or do something else
}
}
我认为你可以从AuthorizationContext中获取articleId,所以不需要将其作为属性传递。
你只需这样做:
[CheckArticleExistence]
public ActionResult Tags(int articleId)
{
...
}