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

     // ... 
    } 
} 

Hay bastantes opciones disponibles pero ninguna parece estar especialmente diseñada para casos como este.C# ¿Qué excepción debo plantear aquí?

es decir:

  • UnauthorizedAccessException: I/O
  • AccessViolationException: Memoria cosas
  • SecurityAccessDeniedException: Representa la excepción de seguridad que se inicia cuando una solicitud de autorización de seguridad falla.

etc.

¿Debo crear mi propio tipo de excepción para esto? ¿Qué excepción debería plantearse cuando los usuarios de membresía no tienen suficientes privilegios para invocar un método?

Respuesta

4

AccessViolationException es una mala idea. Solo debe ser lanzado por el tiempo de ejecución en sí. E indica una falla muy grave (su memoria se corrompió) donde la única respuesta adecuada es terminar el proceso. Una solicitud web no válida ciertamente no es equivalente a la memoria dañada.

UnauthorizedAccessException suena como una elección decente. Es posible que desee derivar su propia clase para crear una excepción más específica.

1

UnauthorizedAccessException parece adecuado; no está reservado para operaciones IO. Pero si no te gusta, simplemente crea el tuyo.

Cuestiones relacionadas