[Authorize]
атрибут - хорошее и удобное изобретение MS, и я надеюсь, что он может решить проблемы, которые у меня есть сейчас
Чтобы быть более конкретным:
Если текущий клиент не аутентифицирован - [Authorize]
перенаправляет с защищенного действия на страницу входа, а после успешного входа - возвращает пользователя, это хорошо.
Но когда текущий клиент уже аутентифицирован, но не авторизован для выполнения определенного действия - все, что мне нужно, это просто отобразить мою общую страницу 403.
Возможно ли это без перемещения логики авторизации в теле контроллера?
Обновление :
Поведение, в котором я нуждаюсь, должно быть семантически равным этому эскизу:
public ActionResult DoWork()
{
if (!NotAuthorized())
{
// this should be not redirect, but forwarding
return RedirectToAction("403");
}
return View();
}
так - никакого перенаправления не должно быть, и URL-адрес должен оставаться прежним, но содержимое страницы должно быть заменено на 403 страницы
Обновление 2 : я реализовал эскиз следующим образом:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
[CustomActionFilter]
public ActionResult About()
{
return View();
}
public ActionResult Error_403()
{
return Content("403");
}
}
public class CustomActionFilter : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Result = new ContentResult { Content = "403" };
}
}
И не могу понять, как правильно перенаправить выполнение в HomeController.Action_403 (), чтобы оно отображало 403.
Обновление 3 :
filterContext.Result = new ViewResult() { ViewName = "Error_403" };
так что это ответ о том, как визуализировать определенный шаблон представления ... но все еще не знаю, как запустить другой контроллер - в любом случае, это достаточно хорошее решение.