应抛出哪个异常?

时间:2011-02-28 17:48:51

标签: c# asp.net-mvc exception

我编写了一个自定义操作方法选择器属性,它具有三个bool属性。它们中的所有三个都是false无效。其中至少有一个必须是true。执行IsValidForRequest后,我会检查其中至少有一个是true。但如果没有,我应该抛出哪个例外?

一些相关代码:

public class MyCustomAttribute : ActionMethodSelectorAttribute
{
    public bool Prop1 { get; set; }
    public bool Prop2 { get; set; }
    public bool Prop3 { get; set; }

    public MyCustomAttribute()
    {
        this.Prop1 = true;
        this.Prop2 = true;
        this.Prop3 = true;
    }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException("controllerContext");
        }

        // at least one of them must be true
        if (!this.Prop1 && !this.Prop2 && !this.Prop3)
        {
            throw new ?????
        }

        // other codez here
    }
}

属性具有初始化它们同时提供属性值的良好能力,因此我必须使用IsValidForRequest方法检查它们。

[MyCustom(Prop1 = false, Prop2 = false, Prop3 = false)]

应该抛出哪个异常?

3 个答案:

答案 0 :(得分:8)

我可能会抛出InvalidOperationException,因为该操作对于对象的当前状态无效。

答案 1 :(得分:0)

如果这些属性是从用户输入加载的,您可以尝试使用ArgumentException,或者您可以实现自己的custom exception投掷。

这实际上取决于这些属性的设置方式。

答案 2 :(得分:-1)

使用

向您的特定自定义消息引发异常
throw new Exception("Custom Error Message");