2016-08-28 3 views
1

Когда я посылаю запрос со стороны клиента я получил 302 кода и перенаправлять для входа, но следующий я получил:asp.net веб-апи Авторизоваться 302 код

консоли журнала: XMLHttpRequest cannot load https://login.microsoftonline.com/........................ No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://localhost:' is therefore not allowed access. Error: Response with status: 0 for URL: null

ApiController:

[Authorize] 
     public string Get() 
     { } 

Хотелось бы вернуть код состояния 401 или что-то в этом роде.

+0

вы не имеете разрешения на вызов 'https: //login.microsoftonline.com/...' от вашего происхождения 'https: // локальный: 44315' –

+0

Да, я знаю, но я хочу ответить 401 или данные клиенту, не перенаправлять – wroe12

+0

Вам нужно подробнее рассказать и дать больше кода –

ответ

1

Похоже, что вы не включили CORS в свой API или используете аутентификацию cookie вместо аутентификации, основанной на токенах.

Чтобы вернуть 401 вместо 302, вы можете написать какое-то пользовательское промежуточное ПО Owin, которое будет проверять, что возвращает ваш контроллер, и изменить ответ, чтобы он соответствовал вашим потребностям.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace Middleware 
{ 
    using Microsoft.Owin; 

    public sealed class MyCustomMiddleware : OwinMiddleware 
    { 
     public MyCustomMiddleware(OwinMiddleware next) 
      : base(next) 
     { 
     } 

     public override async System.Threading.Tasks.Task Invoke(IOwinContext context) 
     { 

      // Code here executed before reaching the controller 
      await Next.Invoke(context); 
      // Code here executed after reaching the controller, includes the response 
      // check response here and modify it to suit your needs 
      if(context.Response.StatusCode == 302) { 
       var headers = context.Response.Headers; 
       headers.Keys.ForEach(k => headers.Remove(k)); 
       context.Response.StatusCode = 401; 
       context.Response.ContentType = string.Empty; 
       context.Response.ContentLength = null; 
       await context.Response.WriteAsync(string.Empty); 
      } 
     } 
    } 
} 

затем в startup.cs

 app.Use<Middleware.MyCustomMiddleware>(); 
+0

Да, я использую аутентификацию cookie, но MyCustomMiddleware ничего не меняет, у меня есть t он же ошибка и 302. – wroe12

+0

это даже вызывается? Вы поставили в нем точку останова? – Darxtar

+0

Да, я использовал точку останова – wroe12

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