У меня есть сайт ASP.net 5.0 (MVC 6) и используйте этот сайт также для некоторых мобильных приложений. У меня есть контроллер, который возвращает данные json.ASP.net 5.0 - WebAPI Authorize & ErrorCode 302 вместо 401
Пользователь должен аутентифицироваться, чтобы просмотреть эти данные, поэтому я использую атрибут [Авторизовать] для Контроллера.
Я ожидал получить ошибку 401 для несанкционированных запросов nur Я получаю перенаправление (302) на страницу входа. В мобильном клиенте установите заголовок, чтобы принимать только данные «application/json», но я все равно получаю перенаправление на страницу входа.
Я разработал решение, которое работает, но я не очень доволен этим. Это работает, но это своего рода хак.
Есть ли лучшее решение для этого?
Вот мое решение (Настройка метода в классе запуска)
//....Some Code
app.Use(async (context, next) =>
{
await next.Invoke();
if (context.Response.StatusCode == 302)
{
StringValues contentType;
if (context.Request.Headers.TryGetValue("Accept", out contentType)
&& contentType.Contains("application/json"))
{
context.Response.StatusCode = 401;
if (env.IsDevelopment())
await context.Response.WriteAsync("No Access");
}
}
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Согласно https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-not-authorized-instead-of, это fixed –