Я переношу свой проект в ядро asp.net, и я застрял в переносе моего атрибута CustomAuthorization для своих контроллеров. Вот мой код.Как переопределить HandleUnauthorizedRequest в ASP.NET Core
public class CustomAuthorization : AuthorizeAttribute
{
public string Url { get; set; }
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult(Url + "?returnUrl=" + filterContext.HttpContext.Request.Url.PathAndQuery);
}
else if (!Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))
{
filterContext.Result = new ViewResult
{
ViewName = "AcessDenied"
};
}
else
{
base.HandleUnauthorizedRequest(filterContext);
}
}
}
тогда я использовал его для моих контроллеров
[CustomAuthorization(Url = "/Admin/Account/Login", Roles = "Admin")]
public abstract class AdminController : Controller { }
так, в принципе я могу использовать его для перенаправления на другую страницу входа в систему, когда роли не выполняется. У меня мало областей, и у каждой из них есть другая страница входа. Я попытался с помощью CookieAuthenticationOptions как этот
services.Configure<CookieAuthenticationOptions>(options =>
{
options.AuthenticationScheme = "Admin";
options.LoginPath = "/Admin/Account/Login";
});
затем на мой контроллер администратора
[Area("Admin")]
[Authorize(ActiveAuthenticationSchemes = "Admin", Roles = "Admin")]
, но после того, как я войти в систему, она по-прежнему не могу получить.
Вы пробовали пошагового этот код? Выполняется ли это? Где это происходит? – Darkonekt
Взгляните на http://stackoverflow.com/questions/31464359/custom-authorizeattribute-in-asp-net-5-mvc-6 –