2016-05-02 2 views
0

Dans notre application Web ASP.NET MVC C#, nous souhaitons souvent renvoyer un message générique non autorisé en tant que réponse JSON aux appels AJAX si l'utilisateur échoue à un contrôle d'authentification. . Ma première pensée était de le faire de cette façon:Fournit automatiquement HttpUnauthorizedResult (erreur 401) par défaut StatusDescription au lieu de null

return Json(new HttpUnauthorizedResult().StatusDescription); 

Le problème est, la propriété est StatusDescriptionnull par défaut. Ce serait génial si nous pouvions surcharger le constructeur pour instancier cette propriété pour avoir un message générique non autorisé si aucun n'est fourni, mais je ne peux pas comprendre comment le faire.

Est-ce que quelqu'un sait comment implémenter cela? N'hésitez pas à suggérer un meilleur moyen d'implémenter les messages d'erreur Http dans les appels AJAX si ce n'est pas une bonne méthode.

Répondre

1

HttpUnauthorizedResult a un constructeur qui prend la description. Vous pouvez l'utiliser Msdn

return Json(new HttpUnauthorizedResult("token not found...")); 

Si le message est toujours le même, vous pouvez hérite de HttpUnauthorizedResult:

public class MyHttpUnauthorizedResult : HttpUnauthorizedResult 
{ 
    public MyHttpUnauthorizedResult() : base("token not found") {} 
} 
+0

Je sais que je peux fournir explicitement chaque fois, mais nous aimerions ne pas avoir à copier ce message chaque fois que nous voulons l'utiliser. Le faire avoir automatiquement une valeur par défaut si aucun n'est fourni est mon objectif. –

+0

Vous pouvez définir votre propre classe qui hérite de HttpUnauthorizedResult et fournir le message par défaut. – ema

1

Vous pouvez créer une classe qui hérite de HttpUnauthorizedResult et des chaînes au constructeur de classe de base.

public class HttpUnauthorizedWithDefaultText : HttpUnauthorizedResult 
{ 
    public HttpUnauthorizedWithDefaultText() : base("Some default text") 
    { 
    } 
} 

alors vous pouvez faire:

return Json(new HttpUnauthorizedResultWithDefaultText());