Mam witrynę ASP.net 5.0 (MVC 6) i używam tej strony również w niektórych aplikacjach mobilnych. Mam kontroler, który zwraca dane json.ASP.net 5.0 - WebAPI Authorize & ErrorCode 302 zamiast 401
Użytkownik musi uwierzytelnić, aby zobaczyć te dane, więc używam atrybutu [Autoryzuj] dla kontrolera.
Oczekiwano, że otrzymam błąd 401 w przypadku nieautoryzowanych żądań nur Otrzymuję przekierowanie (302) na stronę logowania. W kliencie mobilnym ustaw nagłówek tak, aby akceptował tylko dane "application/json", ale nadal dostaję przekierowanie do strony logowania.
Opracowałem rozwiązanie, które działa, ale nie jestem z niego zadowolony. Działa, ale jest to rodzaj hackowania.
Czy istnieje lepsze rozwiązanie tego problemu?
Oto moje rozwiązanie (Configure metoda w klasie startowego)
//....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?}");
});
Zgodnie z https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-nie-autoryzowane-wprowadzenie- naprawiono –