2011-09-10 9 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(); 

     // ... 
    } 
} 

Ci sono alcune opzioni disponibili ma nessuna sembra essere particolarmente progettata per casi come questo.C# quale eccezione dovrei aumentare qui?

cioè:

  • UnauthorizedAccessException: I/O
  • AccessViolationException: Memoria roba
  • SecurityAccessDeniedException: Rappresenta l'eccezione di protezione che viene generata quando una richiesta di autorizzazione di sicurezza fallisce.

ecc

Devo creare il mio tipo di eccezione per questo? Quale eccezione dovrebbe essere sollevata quando gli utenti non hanno abbastanza privilegi per invocare un metodo?

risposta

4

AccessViolationException è una cattiva idea. Dovrebbe essere lanciato solo dal runtime stesso. E indica un errore molto grave (la memoria si è corrotta) dove l'unica risposta appropriata sta terminando il processo. Una richiesta web non valida non è certamente equivalente alla memoria corrotta.

UnauthorizedAccessException suona come una scelta decente. Potresti voler ricavare la tua classe da essa per creare un'eccezione più specifica.

1

UnauthorizedAccessException sembra adeguato; non è riservato alle operazioni IO. Ma se non ti piace, creane di tuoi.