EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

ASP.NET应用程序中的错误处理

本主题演示了ASP.NET应用程序中使用的错误处理机制,并说明了如何自定义它们。

当前页面上的错误消息(ErrorInfoControl)

在XAF ASP.NET Web应用程序中,执行Action会引发异常。在这种情况下,无需加载错误页面,这可能会使最终用户感到困惑。而是eXpressApp框架提供了显示在当前页面上的ErrorInfoControl控件。所有Web模板都包含此控件,但最初是不可见的。当动作的事件处理程序中引发异常时,处理异常的系统将使该控件可见,并在其中显示错误说明。

下图说明了带有失败操作的页面上的ErrorInfoControl

ErrorHandlingExceptionOnAction

之后,最终用户可以继续使用该应用程序。

您也可以使用此ErrorInfoControl手动提供有关非严重错误的信息。为此,请调用ErrorHandling.SetPageError方法,该方法将所需的异常作为参数。例如,当从其动作集合执行动作时引发异常时,内置动作容器会调用此方法。

public static class ActionExceptionHandler {
    public static void HandleException(HandleExceptionEventArgs e) {
        if(!e.Handled) {
            ErrorHandling.Instance.SetPageError(e.Exception);
            e.Handled = true;
        }
    }
}
// ...
public class ActionContainerHolder : Panel, INamingContainer {
// ...
    private void action_ExecutionException(object sender, HandleExceptionEventArgs e) {
        ActionExceptionHandler.HandleException(e);
    }
// ...
}

在上面的代码中,ErrorHandling是一个类,用于处理ASP.NET应用程序中发生的错误。

注意

您可以处理静态ErrorInfo.FormatText事件,以为XAF标准错误消息提供自定义文本。

错误页面上的错误消息

在错误页面上报告未通过ErrorInfoControl(上面定义)报告的错误。错误页面由Web应用程序项目的Global.asax.cs(Global.asax.vb)文件中实现的Application_Error方法显示。此方法调用ErrorHandling.ProcessApplicationError方法,该方法执行以下操作。

  • 发送通知给应用程序管理员

    错误描述和日志文件中的相应部分通过电子邮件发送给Web.config文件中指定的收件人。可用的电子邮件设置在本主题的结尾列出。

    默认情况下,使用简单邮件传输协议(SMTP)发送有关错误的收集信息。如果需要使用其他通知传递机制(例如,即时消息传递),则处理ErrorHandling.CustomSendErrorNotification事件,实现通知传递并将处理程序的Handled参数设置为true。如果您接受使用SMTP,但需要自定义消息选项(例如,提供SMTP凭据),请使用<smtp>元素,或处理ErrorHandling.CustomSendMailMessage事件。此外,您可以自己在处理程序中发送消息。在这种情况下,将Handled参数设置为true

  • 将异常写入日志文件

    记录 有关发生的异常的信息。

  • 显示错误页面

    通常,将加载由RichErrorReportPage设置指定的Error.aspx页。该页面提供了错误说明以及最终用户可能执行的步骤。另外,如果应用程序是在本地运行的,或者用户IP是由DetailedErrorReaderIp设置指定的,则此错误页面将包含有关错误的详细信息以及日志文件的相应部分。错误页面还可以包含一个编辑器,该编辑器允许最终用户向应用程序管理员发布其他信息。如果未配置电子邮件设置,则不会显示编辑器。

    如果启动应用程序时发生错误,或者RichErrorReportPage设置未指定错误页面,则会生成带有错误消息的HTML页面。您可以指定在这种情况下要加载的自定义HTML页面。为此,请将SimpleErrorReportPage设置设置为自定义页面。此项的值中允许使用{REQUESTURL}和{DETAILS}参数。这些参数将分别替换为请求URL和错误详细信息。

下图说明了错误处理机制。

错误处理

下图演示了默认的简单错误页面。

ErrorHandlingSimpleErrorPage

下图演示了默认的丰富错误页面。

ErrorHandlingErrorPage

与错误处理相关的配置文件密钥

键名 样本值 描述
ErrorReportEmail admin@example.com 指定错误通知将发送到的电子邮件地址。您可以提供多个地址,以分号分隔。如果省略,则不发送通知。
ErrorReportEmailServer smtp.example.com 指定用于传递通知的SMTP服务器。如果服务器要求身份验证,请按照ErrorHandling.CustomSendMailMessage主题中的说明进行操作。您也可以忽略此键。从设置<SMTP>元素将在这种情况下被使用。
ErrorReportEmailFrom application@example.com 指定将从其发送错误通知的电子邮件地址。如果省略,则使用“ null@nospam.com”地址。
ErrorReportEmailFromName {0:ApplicationName}错误 指定在通知的“发件人”字段中使用的名称。您可以使用ApplicationNameExceptionMessage参数。这些参数将分别替换为应用程序名称和异常消息。如果省略,则使用“ {0:ApplicationName}错误处理系统”文本。
ErrorReportEmailSubject 发生“ {0:ExceptionMessage}”错误。 指定用作通知主题的文本。您可以使用ApplicationNameExceptionMessage参数。这些参数将分别替换为应用程序名称和异常消息。如果省略,则使用“ {0:ExceptionMessage}”文本。
ErrorReportEnableSsl 真的 指定SMTP连接是否已加密。``True''和``1''值启用加密,其他任何值都将其禁用。如果省略,则不使用加密。如果未指定ErrorReportEmailServer值,则将忽略此键值。
SimpleErrorReportPage simpleerrorreport.html 指定自定义网页的URL,其内容将显示为简单的错误报告。当启动应用程序时发生错误或未指定丰富的错误报告内容时,将显示简单错误报告。{REQUESTURL}和{DETAILS}字符串将分别替换为请求URL和错误详细信息。如果请求默认为本地,则错误详细信息可见。如果省略,则生成默认内容。
RichErrorReportPage richerrorreport.html 指定自定义网页的URL,其内容将显示为格式丰富的错误报告。在运行时发生错误时,将显示丰富的错误报告。{REQUESTURL}和{DETAILS}字符串将分别替换为请求URL和错误详细信息。如果请求是本地的,则默认情况下将显示错误详细信息。在默认的Web.config文件中指定了“ Error.aspx”页。如果省略,则显示简单错误报告。
DetailedErrorReaderIp 192.168.0.101 指定远程主机的IP地址,允许其获取详细的错误信息(包括跟踪条目)。如果省略,则仅对本地请求显示错误详细信息。

这些设置应在Web.config文件的appSettings部分中指定。

<appSettings>
    <add key="ErrorReportEmail" value="admin@example.com" />
    <add key="ErrorReportEmailFrom" value="application@example.com" />
    <add key="ErrorReportEmailServer" value="smtp.example.com" />
    <add key="SimpleErrorReportPage" value="" />
    <add key="RichErrorReportPage" value="Error.aspx" />
    <!-- ... -->
</appSettings>

转载保留此链接,注明出处