Обработка исключений 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

Другие вопросы по тегам