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

     // ... 
    } 
} 

有很多選擇可用,但沒有一個似乎是特別爲這種情況設計的。C#我應該在這裏舉個例外嗎?

即:

  • UnauthorizedAccessException:I/O
  • AccessViolationException:記憶的東西
  • SecurityAccessDeniedException:代表當安全授權請求失敗時引發安全異常。

我應該創建自己的異常類型的呢?成員用戶沒有足夠的權限來調用某個方法時應該提出什麼例外?

回答

4

AccessViolationException是一個壞主意。它只應該由運行時本身引發。它表明一個非常嚴重的故障(您的內存已損壞),唯一適當的響應是終止過程。無效的Web請求當然不等同於損壞的內存。

UnauthorizedAccessException聽起來像一個不錯的選擇。你可能想從它派生你自己的類來創建一個更具體的異常。

1

UnauthorizedAccessException似乎足夠;它不保留用於IO操作。但是,如果你不喜歡它,只需創建你自己的。