2011-09-10 3 views
5
[WebService(Namespace = "http://service.site.com/service/news")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[ToolboxItem(false)] 
[ScriptService] 
public class NewsService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod] 
    public void DoPost(string title, string markdown, int categoryId) 
    { 
     if (!MembershipHelper.IsAtLeast(RoleName.Administrator)) 
      throw new AuthenticationException(); 

     // ... 
    } 
} 

Il existe un certain nombre d'options disponibles, mais aucune ne semble particulièrement conçue pour ce type de cas.C# Quelle exception dois-je soulever ici?

i.e.:

  • UnauthorizedAccessException: E/S
  • AccessViolationException: Des vêtements mémoire
  • SecurityAccessDeniedException: Représente l'exception de la sécurité qui est émise lorsqu'une demande d'autorisation de sécurité échoue.

etc.

Dois-je créer mon propre type d'exception pour cela? Quelle exception doit être levée lorsque les utilisateurs d'appartenance n'ont pas assez de privilèges pour invoquer une méthode?

Répondre

4

AccessViolationException est une mauvaise idée. Il devrait seulement être lancé par l'exécution elle-même. Et cela indique un échec très grave (votre mémoire est corrompue) où la seule réponse appropriée est de terminer le processus. Une requête Web invalide n'est certainement pas équivalente à de la mémoire corrompue.

UnauthorizedAccessException ressemble à un choix décent. Vous pourriez en tirer votre propre classe pour créer une exception plus spécifique.

1

UnauthorizedAccessException semble adéquat; Ce n'est pas réservé aux opérations d'E/S. Mais si vous ne l'aimez pas, créez simplement le vôtre.

Questions connexes