2015-12-07 4 views
5

Ich habe eine ASP.net 5.0 (MVC 6) Website und verwende diese Website auch für einige mobile Apps. Ich habe einen Controller, der JSON-Daten zurückgibt.ASP.net 5.0 - WebAPI Authorize & ErrorCode 302 statt 401

Der Benutzer muss authentifizieren, um diese Daten zu sehen, damit ich das Attribut [Autorisieren] für den Controller verwenden.

Ich erwartete, einen Fehler 401 für nicht autorisierte Anfragen zu bekommen, nur bekomme ich eine Umleitung (302) auf die Login-Seite. Setzen Sie im Mobile Client den Header so, dass nur "application/json" -Daten akzeptiert werden, aber ich bekomme immer noch die Weiterleitung zur Login-Seite.

Ich habe eine Lösung entwickelt, die funktioniert, aber ich bin nicht sehr glücklich damit. Es funktioniert, aber es ist eine Art Hack.

Gibt es dafür eine bessere Lösung?

Hier ist meine Lösung (Configure-Methode in Startup-Klasse)

 //....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

Nach https://aspnet.uservoice.com/forums/147201-asp-net-web-api/suggestions/2856315-add-option-to-return-401-not-authorized-instead-of, es ist fixed –

Antwort

2

Dies sollte vom Kunden gelöst werden. Der Client muss einen X-Requested-With Header mit dem Wert XMLHttpRequest senden.

So soll dies ein Teil der in der HTTP-Anforderung Abschnittsüberschriften sein:

X-Requested-With: XMLHttpRequest 

Jetzt werden Sie Ihren 401 ist ohne Hacks bekommen.

+0

Dies funktioniert nicht mit dotnet core, Sie müssen Ihrer Authentifizierungs-Middleware (zB CookieAuthenticationMiddleware oder OpenIdConnectMiddleware) ein benutzerdefiniertes Ereignis hinzufügen, um den Header 'X-Requested-With: XMLHttpRequest' zu erkennen und selbst eine 401 zurückzugeben. – dstj

+0

Perfekt. Das habe ich gesucht. Vielen Dank. – JRoppert

Verwandte Themen