Вот моя проблема. У меня есть 2 роли один для «Администратора» и последний для «Клиент». В моем HomeController у меня есть действие «Индекс», к которому я хочу получить доступ только роль «Администратор». Поэтому, когда у меня есть x пользователь, прошедший проверку подлинности, который не имеет роли «Администратор», я хочу, чтобы он не перенаправлялся на страницу входа в систему (указанную в моем файле веб-конфигурации), а на конкретное действие. Вот мой кодПеренаправление внутри Controller.OnAuthorization в ASP.NET MVC 4
[Authorize(Roles="Administrator")]
public ActionResult Index()
{
List<object> users = new List<object>();
foreach (MembershipUser u in Membership.GetAllUsers())
{
users.Add(u);
}
return View(users);
}
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (User.Identity.IsAuthenticated && !User.IsInRole("Administrator"))
{
if (filterContext.RequestContext.HttpContext.Request.RawUrl == "/")
{
filterContext.Result = new RedirectResult(Url.Action("Denied"));
}
//filterContext.HttpContext.Response.Redirect("/Home/Denied");
}
else
{
base.OnAuthorization(filterContext);
}
}
//this action is for any authenticated user
[Authorize]
public ActionResult Denied()
{
return View(User.Identity.Name);
}
Этот вопрос бросает System.InvalidOperationException и ~/Views/Home/xyz.cshtml не существует. Конечно, url должен быть ~/Views/Home/denied.cshtml Для информации «xyz» является аутентификация UserName. Как я могу перенаправить? Thanks
'вернуться View (Пользователь.Идентичность.Имя);' бросает ошибку вы видите – JamieD77
, если вы пытаетесь вернуть имя пользователя вам нужно указать, что 'User.Identity .Name' является моделью с помощью 'return View (model: User.Identity.Name);' – JamieD77
Вы правы, первый строковый параметр в представлении конструктора соответствует имени представления. Большое спасибо. –