Reputation: 398
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.
Upvotes: 3
Views: 1899
Reputation: 74176
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)
{
...
}
Upvotes: 3
Reputation: 398
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))
{
...
}
}
}
Upvotes: 5
Reputation: 180908
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
}
}
Upvotes: 3