我有一个属性
public class RequiresAdminRights : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
User user = User.Load(HttpContext.Current.User.Identity.Name);
if (user != null)
{
if (!(user.IsInRole(Role.Administrator)))
throw new Exception("You need admin rights to access this resource.");
}
}
}
在我的控制器中我有
[Attributes.RequiresAdminRights]
public class UserController : Controller
{
public ActionResult Index()
{
return View();
}
}
登录的用户没有任何管理员权限,而RequiresAdminRights会抛出异常。如何显示异常消息?
答案 0 :(得分:0)
抛出一个自定义异常,如PermissionDeniedException
,创建一个基本的Controller类并定义如下。
[HandleError(ExceptionType = typeof(PermissionDeniedException), View = "Login")]]
public class BaseController : Controller
{
}
您的控制器现在应该扩展此类。 另外,不要忘记打开web.config中的customErrors。
现在,每次投掷和PermissionDeniedException
用户都将被重定向到“登录”视图。另一种选择是将用户重定向到“权限被拒绝的视图”,该视图将向用户解释他在访问该页面之前需要登录。
有关详细信息,您可以查看其他SO问题。