2017-12-06 4 views
0

Mein Problem: Wenn eine Sitzung abläuft, Benutzer kann immer noch eine Aktion (Suche) ausführen. Aktionsergebnisse sind Müll (Controller wurde nicht besucht). Ich weiß nicht warum; Ich möchte nur einen Benutzer zur Anmeldeseite umleiten.Umleiten auf Standard in Web Api Autorisieren

Mein Plan ist es, benutzerdefinierte Autorize und überschreiben HandleUnauthorizedRequest (HttpActionContext) und umleiten einen Benutzer zum Index. Ich habe keine Ahnung, wie ich auf meine Standardseite umleiten soll.

Beispielcode:

public class SessionTimeoutAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
    { 
     base.HandleUnauthorizedRequest(actionContext); 
     //redirect here 
    } 
} 

Antwort

1

Sie suchen Antwort von actionContext auf Unauthorized HTTP-Antwort zu setzen. Hier ist ein Beispiel, wie es geht.

public class SessionTimeoutAttribute: AuthorizeAttribute { 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) { 

     base.HandleUnauthorizedRequest(actionContext); 
     actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized); 

    } 
} 

umleiten Dies sollte hoffentlich Benutzer auf die Seite, die Sie (hoffentlich) in CookieAuthenticationOptions definiert.

Edit: Um ehrlich zu sein, definiert diese Art der Zweck der Web-API, wenn Sie Benutzer auf die gleiche Weise wie Sie eine normale Seite eingeben zugreifen. Sie sollten auf dem Client feststellen, ob die Antwort vom Web-API-Endpunkt success, unathorized usw. war. Sie sollten das anstelle der direkten redirect von der Web-API zurückgeben.

Wenn Sie wirklich umleiten wollen, könnte man versuchen, die folgenden ...

var response = actionContext.Request.CreateResponse(HttpStatusCode.Redirect); 
response.Headers.Location = new Uri("https://www.stackoverflow.com"); 
actionContext.Response = response; 

Noch einmal, ich nicht den Punkt sehen, von Web-API in umleitet. Es sollte nur die angeforderten Daten/Fehler zurückgeben. Sie sollten es sonst wo bearbeiten.

+0

Ja ... so - hier ist das Problem: Ich habe HttpActionContext, und Du hast mir ein Beispiel mit AuthorizationContext. Mein actionContext enthält kein Ergebnis –

+0

@CapitanPlanet Natürlich, mein Schlechter. Ich neige dazu, Dinge anzunehmen, an denen ich normalerweise arbeite :-) Die Antwort wurde aktualisiert. – Adriani6

+0

herausgefunden, aber es funktioniert nicht ... Es hat mich nicht umgeleitet. Ich bin immer noch auf der gleichen Seite. –

-1

Ich dachte, ich kann direkt von Web-API auf die Website umleiten ... Nun, kann ich nicht. Es stellte sich heraus, ich brauche keine benutzerdefinierte Autorisieren, weil [Autorisieren] Redirect korrekt. Ich brauche meinen Kunden, um umzuleiten, wenn Autorisieren will. In meinem Fall (Angular 1,5) war es ein Abfangjäger.

app.service('httpRedirectInterceptor', ['$window', function ($window) { 
this.response = function (redirection) { 
    if (typeof redirection.data === 'string') { 
     if (redirection.data.indexOf instanceof Function && 
      redirection.data.indexOf('id="app-login-page"') != -1) { 
      $window.location.pathname = "/Account/Login"; 
     } 
    } 
    return redirection; 
}; 

this.request = function (req) { 
    var elem = angular.element(document.body).find('div[ncg-request-verification-token]').attr('ncg-request-verification-token'); 
    req.headers['RequestVerificationToken'] = elem || "no request verification token"; 

    return req; 
};}]); 

und in app.config

$httpProvider.interceptors. 
push('httpRedirectInterceptor'); 
+0

Wirklich? Nachdem ich dir die Antwort gegeben habe, postest du sie als deine eigene und markierst sie als korrekt ...? Ziemlich sicher, so funktioniert das nicht. – Adriani6

+1

Sory ... Ich könnte sagen, es könnte 2 richtige Antworten geben. Scheinbar nicht –

Verwandte Themen