2017-02-28 4 views
5

Dans mon projet WebAPI, j'ai le nombre d'API qui sont décorées avec l'attribut [Authorize].Comment retourner un message personnalisé si Authorize échoue dans WebAPI

[Authorize] 
public HttpResponseMessage GetCustomers() 
{ 
    //my api 
} 

Si l'utilisateur n'a pas le jeton approprié, une exception d'accès refusé est renvoyée à l'utilisateur.

Mais ce dont j'ai besoin, c'est que dans un tel cas, j'ai besoin de renvoyer le message de réponse personnalisé. Comment puis-je retourner ce message personnalisé en cas d'échec de l'autorisation?

S'il vous plaît noter:

  • J'utilise Owin - authentification par jeton.
  • Je suis et non stocker le jeton d'accès dans ma base de données ou n'importe où ailleurs.
+0

lire les réponses ici: http://stackoverflow.com/questions/20149750/owin-unauthorised-webapi-call-returning-login-page-rather-than-401 –

+0

http://stackoverflow.com/questions/2578756/comment-faire-autoriser-attribut-retour-custom-403-erreur-page-au lieu-de-rediriger –

Répondre

9

Il existe différentes façons de le faire, mais l'un des meilleur moyen pourrait être attributes.You d'autorisation sur mesure juste besoin d'hériter de la méthode AuthorizeAttribute et passer outre HandleUnauthorizedRequest() de celui-ci.

public class CustomAuthorization : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext) 
    { 
     actionContext.Response = new HttpResponseMessage 
     { 
      StatusCode = HttpStatusCode.Forbidden, 
      Content = new StringContent("You are unauthorized to access this resource") 
     }; 
    } 
} 

et utiliser cela comme (CustomAuthorization doit être utilisé en lieu de Authorize)

[CustomAuthorization]  
    public IHttpActionResult Get() 
    { 
     return Ok(); 
    } 

Sinon, vous pouvez également prendre le code de statut côté client et afficher le message personnalisé de votre choix.

+0

Merci mate :) Il a répondu à mes exigences. Comme vous l'avez mentionné il y a un certain nombre de façons, je vous serais reconnaissant si vous pouviez ajouter une autre manière –

+0

d'autres manières pourrait être gérer l'exception du côté client ou gérer l'exception au niveau global d'application mais la meilleure manière dont je le mentionne selon mes connaissances –

+1

Okay . Super. Encore une fois Merci :) –