1

Ich benutze MVC 6 Web API und ich habe eine Methode (siehe unten). Wenn der Benutzer nicht authentifiziert ist (angemeldet) und macht den Aufruf (Beispiel url: https://localhost:44338/api/account/Test), werden sie automatisch auf url geschoben:Warum werde ich automatisch zur Anmeldeseite weitergeleitet, wenn ein Benutzer nicht authentifiziert wird, indem ich die Web-API aufruft?

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

aber dies ist ein Projekt-api und hat keine Aussicht (zB dass ich automatisch hierher geschoben werde).

Code:

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

Warum bin ich auf der Login-Seite automatisch geschoben zu werden? Ich habe nichts in meiner startup.cs oder web.config, die dies angibt. Es scheint wie Standardverhalten? Wie deaktiviere ich das, damit ich nur den Status 401 bekomme?

Vielen Dank im Voraus!

+0

nur zu sagen, ich bin mit MVC 6, die ASP ist. net Core 1 :-) –

+0

Sie sollten auch die richtigen Tags verwenden dann – Tseng

+0

Ich habe die Tags jetzt geändert –

Antwort

1

Der Einfachheit halber ist hier die Lösung, die für mich gearbeitet:

 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); 
       } 
      }; 
     }); 

ich zu diesem Artikel darauf wurde: mvc6 unauthorized results in redirect instead von @TrevorWard

0
  1. ASP.NET leitet automatisch auf die Login-Seite, wenn Sie AuthorizationAttribute in Ihrem App_Start/FilterConfig.cs definiert haben, ob AuthorizeAttribute() definiert ist. Wenn dies der Fall ist, entfernen Sie es.
  2. Überprüfen Sie, ob Sie App_Start/Startup.Auth.cs haben. Wenn dies der Fall ist, löschen Sie es.
  3. Wenn Startup.cs mit dem Attribut [assembly: OwinStartupAttribute(typeof(FleetSys.Startup))] versehen ist, entfernen Sie dieses Attribut.
+0

mit MVC 6 hier, so brauchen Sie das Äquivalent in ASP.net Core 1 –

0

Sie verwenden wahrscheinlich ein falsches Autorize-Attribut.

In MVC sollten Sie System.Web.Mvc.AuthorizeAttribute verwenden und das wird umleiten.

In der Web-API sollten Sie System.Web.Http.AuthorizeAttribute verwenden und dieses 401-Statuscode zurückgeben.