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.