Страница ошибки несанкционированного доступа MVC 4

Я пытаюсь создать собственные страницы ошибок для MVC 4 приложения. Но я не могу найти подходящего справочного материала, чтобы узнать об этом.

У меня есть особые требования. Это связано с Unauthorized access ошибкой. Скажем, у меня есть набор страниц, который доступен только определенному типу пользователей. Пользователь, набравший Admin, имеет право доступа к странице администратора, а пользователь, набравший Basic - нет.

Итак, что я хочу сделать, это если пользователь с типом Basic вошел на веб-сайт и если он попытается посетить страницу администратора, вместо того, чтобы бросать его на страницу входа, показать ему сообщение на странице ошибки.

Может ли кто-нибудь помочь мне в этом?




Ответы (1)


Как насчет фильтра исключений?

 [HandleError(Exception = typeof(UnauthorizedAccessException), View = "MyErrorPage")]
 public class MyController { }

Я не могу это проверить в данный момент, если это не сработает, дайте мне знать, и я создам для этой цели собственный фильтр.

ОБНОВЛЕНИЕ

Поскольку вы создали свой собственный настраиваемый атрибут, вы должны передавать информацию в представление из своего атрибута через TempData:

 public void OnAuthorization(AuthorizationContext filterContext)
 {
     //Note you could assign a complex type here, let's just assign a string
     filterContext.Controller.TempData["ErrorDetails"] = "Here are my details"; 

     // Redirect to an "Unauthorized" controller
     filterContext.HttpContext.Response.Redirect(urlHelper.Action("Index", "Unauthorized"), true);
person Mister Epic    schedule 19.09.2013
comment
Спасибо за ответ. Я попробовал ваш ответ, но это не сработало. У меня есть настраиваемый атрибут авторизации. поэтому эта страница с ошибкой несанкционированного доступа должна отображаться только в том случае, если пользователь уже вошел в систему, но не авторизован для просмотра содержимого. поэтому я использовал метод, упомянутый здесь stackoverflow.com/questions/355700/ но это лучший способ сделать это? Как передать в представление какое-нибудь полезное сообщение об ошибке. - person Amila; 20.09.2013
comment
извините, ссылка должна быть stackoverflow.com/questions/13264496/ - person Amila; 20.09.2013