Я переопределил метод HandleUnauthorizedRequest
в своем приложении asp.net mvc, чтобы убедиться, что он отправляет ответ 401 на несанкционированные вызовы ajax вместо перенаправления на страницу входа. Это отлично работает, когда я запускаю его локально, но мой переопределенный метод не вызывается после развертывания в IIS. Точка отладки вообще не затрагивает мой метод и сразу же перенаправляется на страницу входа.
Это мой код:
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
filterContext.Result = new JsonResult
{
Data = new
{
success = false,
resultMessage = "Errors"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.HttpContext.Response.End();
base.HandleUnauthorizedRequest(filterContext);
}
else
{
var url = HttpContext.Current.Request.Url.AbsoluteUri;
url = HttpUtility.UrlEncode(url);
filterContext.Result = new RedirectResult(ConfigurationManager.AppSettings["LoginUrl"] + "?ReturnUrl=" + url);
}
}
}
и у меня есть атрибут [AjaxAuthorize]
, объявленный поверх моего контроллера. Что может измениться после развертывания в IIS?
Обновление: вот как я тестирую, это очень просто, даже не имеет значения, является ли это запросом ajax или простым обновлением страницы после истечения сеанса входа в систему -
- Я развертываю сайт на моем локальном IIS
- Авторизоваться на сайте, перейти на главную страницу - "/Home"
- Щелкните правой кнопкой мыши ссылку «Выход», «Открыть в новой вкладке» — это гарантирует, что домашняя страница по-прежнему открыта на текущей вкладке, пока сеанс не завершен.
- Обновить домашнюю страницу. Теперь здесь точка отладки должна обратиться к моему переопределенному методу
HandleUnauthorizedRequest
и выполнить условие if/else, а затем перенаправить меня на страницу входа. Но это не так! он просто сразу перенаправляет на страницу входа. Я думаю, что это даже не учитывает мой пользовательский атрибут авторизации.
Однако, когда я запускаю сайт из визуальной студии, все работает нормально, элемент управления входит в точку отладки в моем переопределенном методе и проходит через условие if/else.
What could be different once it's deployed to IIS?
-ConfigurationManager.AppSettings["LoginUrl"]
- вы проверили свой файл конфигурации? - person NightOwl888   schedule 27.09.2017HandleUnauthorizedRequest
моего пользовательского атрибута, даже если я полностью удаляю параметр конфигурации для LoginUrl, он все равно перенаправляется на учетную запись/логин, эта проблема возникает только после развертывания. Я пытался развернуть как в конфигурации отладки, так и в конфигурации выпуска, но та же проблема - person sharath.g   schedule 28.09.2017