1

Я использую MVC 6 web api, и у меня есть метод (показано ниже). Когда пользователь не прошел проверку подлинности (вход в систему) и делает вызов (например, URL: https://localhost:44338/api/account/Test), они получают автоматически толкнул URL:Почему я автоматически перенаправляется на страницу входа, когда пользователь не аутентифицирован, вызывая веб-API?

https://localhost:44338/Account/Login?ReturnUrl=%2Fapi%2Faccount%2FTest

НО это проект веб-апи и не имеет каких-либо видов (например, им автоматически нажимают сюда).

Код:

[HttpGet("test")] 
    [Authorize] 
    public async Task<IActionResult> Test() 
    { 
     return Json("success"); 
    } 

Почему я получаю автоматически толкнул на страницу входа в систему? Я НЕ НИЧЕГО в моем startup.cs или web.config, который указывает это. Это похоже на поведение по умолчанию? Как отключить это, чтобы получить статус 401?

Заранее благодарен!

+0

Просто сказать, я использую MVC 6, который ASP. net Core 1 :-) –

+0

Вы также должны использовать правильные метки, затем – Tseng

+0

Я скорректировал теги сейчас –

ответ

1

Для удобства, вот решение, которое работает для меня:

 services.Configure<IdentityOptions>(o => 
     { 
      o.Cookies.ApplicationCookie.Events = new CookieAuthenticationEvents() 
      { 
       OnRedirectToLogin = ctx => 
       { 
        if (ctx.Response.StatusCode == (int)HttpStatusCode.Unauthorized) 
        { 
         return Task.FromResult<object>(null); 
        } 
        ctx.Response.Redirect(ctx.RedirectUri); 
        return Task.FromResult<object>(null); 
       } 
      }; 
     }); 

Я указал на эту статью: mvc6 unauthorized results in redirect instead по @TrevorWard

0
  1. ASP.NET автоматически перенаправляет на страницу входа в систему, если у вас есть AuthorizationAttribute определены в вашем App_Start/FilterConfig.cs см, если AuthorizeAttribute() определен. Если это произойдет, удалите его.
  2. Проверьте, есть ли у вас App_Start/Startup.Auth.cs. Если это так, удалите его.
  3. Если Startup.cs украшен атрибутом [assembly: OwinStartupAttribute(typeof(FleetSys.Startup))], удалите этот атрибут.
+0

с использованием MVC 6 здесь, так что нужен эквивалент в ASP.net Core 1 –

0

Возможно, вы используете неправильный атрибут Authorize.

В MVC вы должны использовать System.Web.Mvc.AuthorizeAttribute и перенаправить его.

В Web API вы должны использовать System.Web.Http.AuthorizeAttribute и вернуть код статуса 401.