C#我应该在这里提出什么例外?

时间:2011-09-10 16:36:30

标签: c# exception

[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();

        // ...
    }
}

有很多选择,但似乎没有一个特别针对此类案例设计。

即:

  • UnauthorizedAccessException:I / O
  • AccessViolationException:Memory stuff
  • SecurityAccessDeniedException:表示安全授权请求失败时引发的安全异常。

我应该为此创建自己的异常类型吗?当成员资格用户没有足够的权限来调用方法时,应该引发什么异常?

2 个答案:

答案 0 :(得分:4)

AccessViolationException是一个坏主意。它应该只由运行时本身抛出。它表示非常严重的故障(您的内存已损坏),唯一合适的响应是终止该过程。无效的Web请求当然不等同于损坏的内存。

UnauthorizedAccessException听起来像是一个不错的选择。您可能希望从中派生自己的类以创建更具体的异常。

答案 1 :(得分:1)

UnauthorizedAccessException似乎足够了;它不是为IO操作保留的。但如果你不喜欢它,那就创建你自己的。