Обработка исключений PrincipalPermission в MVC3
В моем приложении MVC я украсил некоторые методы моего контроллера следующим образом:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrator")]
public ActionResult Create(FormCollection collection)
{
try {
...
}
catch {
return View();
}
}
И действительно, если я не вошел в систему или не с правильной ролью, приложение MVC выдает исключение. Проблема в том, что приложение не перенаправляется на страницу ошибки.
Я попытался создать базовый контроллер следующим образом:
[HandleError]
public class BaseController : Controller
{
protected override void OnException(ExceptionContext filterContext)
{
// Make use of the exception later
this.Session["ErrorException"] = filterContext.Exception;
// Mark exception as handled
filterContext.ExceptionHandled = true;
// ... logging, etc
// Redirect
filterContext.Result = this.RedirectToAction("Error", "Home");
base.OnException(filterContext);
}
}
И затем добавление вида "Ошибка" в контроллере "Дом" и фактического вида. Проблема в том, что когда я пытаюсь сделать это в Visual Studio, я сначала получаю исключение при вводе метода защищенного действия:
SecurityException was unhandled by the application
и затем я должен выполнить Debug|Continue, и только после этого я перенаправлен в представление Error, но это недопустимо в производственном приложении, поскольку оно должно перейти прямо к представлению Error.
1 ответ
Просто интересно, почему вы не просто используете стандартный AuthorizeAttribute. Уверен, что это сделает то же самое и просто сработает?
Например
[Authorize(Roles="Administrator")]
public ActionResult Create(FormCollection collection)
Статья об общей безопасности MVC здесь. http://www.codeproject.com/Articles/288631/Secure-ASP-NET-MVC3-applications