2015-12-07 3 views
5

У меня есть сайт 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?}"); 
     }); 
+0

Согласно https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-not-authorized-instead-of, это fixed –

ответ

2

Это должна быть решена клиентом. Клиент должен отправить заголовок X-Requested-With со значением XMLHttpRequest.

Так что это должно быть частью секции заголовков в запросе HTTP:

X-Requested-With: XMLHttpRequest 

Теперь вы получите ваши 401 без хаков.

+0

Это не работает с ядром dotnet, вы должны добавить настраиваемое событие к промежуточному программному обеспечению аутентификации (например, CookieAuthenticationMiddleware или OpenIdConnectMiddleware), чтобы обнаружить заголовок 'X-Requested-With: XMLHttpRequest' и вернуть 401 самостоятельно. – dstj

+0

Perfect. Это то, что я искал. Благодарю. – JRoppert

Смежные вопросы