我如何管理另一个类抛出的异常

时间:2010-12-15 16:59:43

标签: c# asp.net exception-handling

我有一个接受用户登录的网络表单 - 密码,电子邮件。然后,我调用一个授权类来测试字段,并在适用的情况下抛出异常。我的问题是:在我的代码隐藏页面中,我应该如何管理/使用这些异常?

授权类 - 电子邮件属性

        public string Email
    {
        get { return _email; }
        set 
        {
            if (value == null)
                throw new ArgumentNullException("Email", "The email address is null");
            if (value == string.Empty)
                throw new ArgumentException("Email", "No email has been entered");
            if (!IsValidEmail(value))
                throw new ArgumentException("Email", "This is an invalid email address");
            _email = value; 
        }
    }

代码隐藏页面 - 某种检查

if (auth.Login(txtUsername.Text, txtPassword.Text) == true) //or whatever the invokation might be
// do somehting with exceptions???

此时我不知道我应该对Authorization类生成的异常做些什么。

7 个答案:

答案 0 :(得分:3)

您还应该进行客户端验证,txtUserName.TexttxtPassword.Text字段不为空。

对于异常,您应该有一个全局处理程序,如果抛出异常(即,如果客户端验证无法捕获某些内容并且服务器引发异常),则会向用户提供一条很好的错误消息。您不应该在客户端上捕获个别异常。

答案 1 :(得分:1)

答案 2 :(得分:1)

您不需要捕获ArgumentException - 这是一种编程错误,而不是运行时异常的异常。 (例如,如果用户的输入无效,则代码应抛出FormatException。)

答案 3 :(得分:1)

你需要这样的东西:

try {
   auth.Login(txtUsername.Text, txtPassword.Text);
}catch(ArgumentNullException anex){
   //output the message to the user
}catch(ArgumentException aex){
   //output the message to the user
}

您需要捕获您抛出的每种类型的异常(或仅捕获Exception)。

答案 4 :(得分:1)

通常,您的应用程序需要对这些异常做出反应,因为它们代表特定的状态。响应可以是报告(记录)适用的异常,将用户重定向到错误页面,或者提供与异常上下文相关的响应(例如,由于输入数据无效,这是一个例外,如果是,则显示表单错误信息等。)。

答案 5 :(得分:1)

try
{
    auth.Login(txtUsername.Text, txtPassword.Text);
}
catch (ArgumentException e)
{
    //Handle Exception here
    MessageBox.Show(e.ToString(), "EMail invalid");
}

答案 6 :(得分:1)

我会公开公开IsValidEmail并在调用login方法之前进行检查。然后你可以在提交之前提出错误。