2011-09-10 7 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操作のために予約されていません。しかし、あなたがそれを好きでない場合は、あなた自身を作成し​​てください。

関連する問題