Для моего проекта mvc5 я применил личность по умолчанию, но изменила его в соответствии с требованиями. Теперь я хотел перенаправить неавторизованных пользователей в представление, которое было создано мной. Я создал специальный фильтр авторизации. Когда неавторизованный пользователь входит, он приходит к моему представлению об ошибках. Я могу узнать его по URL-адресу. Но проблема в том, что он не отображает содержимое в представлении. Вместо этого он показывает ошибку HTTP 404. Я поставил свой код ниже. Я знаю, что это спрашивали здесь несколько раз. Но все же я не мог ее решить. Вся помощь была оценена. Заранее спасибо!Перенаправление неавторизованного пользователя в личность 2.0
public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
}
}
}
ErrorController
public class ErrorController : Controller
{
// GET: Error
public ActionResult Index()
{
return View();
}
public ActionResult AccessDenied()
{
return View();
}
}
AccessDenied вид
<h2>AccessDenied</h2>
Access Denied
На конкретном контроллере
[CustomAuthorize(Roles = "Admin")]
public class ProductTypeController : Controller
{
}
им Ошибка при получении
HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.
ОБНОВЛЕНО ВОПРОС
Теперь я хочу, чтобы перенаправить несанкционированно ErrorView и непроверенным пользователям на странице входа в систему. Я поместил измененный CustomAuthorise ниже. Но это не работает. Pls наставит меня ..
public class CustomAuthorize : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (!httpContext.Request.IsAuthenticated)
return false;
else
return true;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Error", action = "AccessDenied" }));
}
}
Спасибо так много раз ... :) Да ваше решение решить ее. Но есть и другая проблема. Неаутентифицированный пользователь также перенаправляется в представление AccessDenied с помощью вашего решения. Но было бы лучше, если бы я мог перенаправить их на страницу входа. Каким будет решение для этого? – Isuru
В этом случае у вас есть специальный фильтр, чтобы проверить вашу привилегию в 'AuthorizeAttribute.AuthorizeCore()', и если пользователь выполнил вход, но не выполнил эту праву страницы, верните false и в 'HandleUnauthorizedRequest' перенаправить его следующим образом:' filterContext.Result = new RedirectResult ("/ Error/AccessDenied") ' –
Я сделал это, как вы сказали. Но это не работает. Прошу вас посоветовать. Я обновил свой вопрос (часть ОБНОВЛЕНО ВОПРОСОВ). – Isuru