如何有条件地使用MVC控制器注释

时间:2015-11-11 13:45:31

标签: c# asp.net-mvc

使用Asp.Net MVC 5和Identity v2,我有一个控制器动作,如:

[Authorize]
public ActionResult SemiSecureAction(string parameter)
{
   var model = SomeService.InitModel(parameter);
   // some controller logic
   return View(model);
}

仅当参数符合条件时,我才需要在此操作上具有[Authorize]属性。 (例如!String.IsNullOrEmpty(parameter)

也就是说,我只需要在动作的参数符合条件时授权用户,并且在这种情况下我需要具有与[Authorize]属性相同的行为(例如重定向到登录)包含returnUrl等的页面。)

我该怎么做?如何有条件地使用MVC控制器注释?

1 个答案:

答案 0 :(得分:3)

您最好编写自己的实现AuthorizeAttribute的自定义属性。这是一个如何做到这一点的例子

ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)

您在问题中描述的内容是不可能实现的。当参数parameter传递到操作方法时,[Authorize]已经执行。

通过创建自定义属性,您可以访问传递给操作方法的路由值(您可以从传递给HttpContextBase的{​​{1}}中获取该路由值。然后,您可以根据AuthorizeCore()的值执行您喜欢的任何逻辑。