Я использую ASP. NET Identity (MVC 5), и если пользователь больше не авторизован, запросы ajax вернут 200 вместо 302 (перенаправление) или 401 (неавторизованный).
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
ExpireTimeSpan = TimeSpan.FromMinutes(20),
SlidingExpiration = true,
Provider = new CookieAuthenticationProvider {
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser, int>(
validateInterval: TimeSpan.FromMinutes(15),
regenerateIdentityCallback: (manager, user) => user.GenerateUserIdentityAsync(manager), getUserIdCallback: (id) => (id.GetUserId<int>())),
}
});
Авторизация через FilterConfig:
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new AuthorizeAttribute());
}
simple ajax -form:
@using (Ajax.BeginForm("Index2", "Home", null, new AjaxOptions {
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
UpdateTargetId = "content",
}, new { id = "Test" })) {
@Html.AntiForgeryToken()
<input type="submit" value="Submit Data" id="btnSubmit" />
}
Если я вхожу в приложение, оно работает должным образом. Если я удалю .As pNet .ApplicationCook ie, он вернет код состояния 200
HTTP/2 200 OK
cache-control: private
server: Microsoft-IIS/10.0
x-aspnetmvc-version: 5.2
x-aspnet-version: 4.0.30319
x-responded-json: {"status":401,"headers":{"location":"https:\/\/localhost\/TestApp\/Account\/Login?ReturnUrl=%TestApp%2FHome%2FIndex2"}}
x-powered-by: ASP.NET
date: Tue, 16 Jun 2020 14:36:49 GMT
content-length: 0
X-Firefox-Spdy: h2
Если я проверю Application_EndRequest () в Global.asax, он также имеет код состояния 200. Я просто вижу в ответе выше, что это x-ответ- json с 401. Но ajax функция ошибки error: function (xhr, ajaxOptions, thrownError)
не вызывается.
Я просто знаю такое решение на случай аутентификации форм: https://www.codeproject.com/articles/1056969/asp-mvc-handle-ajax-errors-properly
Но я не могу использовать это для ASP. NET Identity, потому что ответ будет кодом 200, а не 302.
Как я могу решить эту проблему с помощью ASP. NET Identity (MVC5)? На данный момент я получу пустой ответ ...