Asp MVC [Авторизовать] для возврата Post вместо Get
-
05-07-2019 - |
Вопрос
Я хотел бы использовать теги [Authorize(Роли ="Администратор")] в моих методах контроллера.
Если пользователь не является администратором, я хотел бы вернуть этого пользователя на свой экран входа в систему.Поведение по умолчанию при возврате пользователя на мою страницу входа в систему - перенаправить моего пользователя на "Учетная запись / Вход в систему", используя URL-адрес Get.
Проблема в том, что все подстраницы моего веб-сайта представляют собой частичные просмотры, обновляемые вызовами Ajax, включая экран моего входа в систему.
Итак, мой вопрос заключается в следующем: Можно ли изменить приведенный ниже класс, чтобы возвращать перенаправление post вместо перенаправления get?
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
override public void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
// Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode.
if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new RedirectResult("../Account/Login");
}
}
}
Решение
По-видимому, проблема, по-видимому, решена путем удаления
[Acceptverbs(HttpVerbs.Post)]
атрибут в методе входа контроллера моей учетной записи.
Таким образом, нам даже не нужно переопределять атрибут AuthorizeAttribute
:)
Другие советы
Я нашел решение в Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication ()
Нужно только добавить appSetting с именем " loginUrl " чтобы указать действие входа в систему:
<add key="loginUrl" value="~/Account/LogOn"/>