ASP.NET异常处理对用户的演示

Fun*_*nky 1 asp.net exception-handling

我在我的网站上添加了try catch,效果很好.开发的下一部分是设置一些异常处理输出.显然,当发生错误并且我不想要一个可怕的错误屏幕时,我不希望网站崩溃.所以,在中间的某个地方会很好.我想在主母版页中有一个异常处理程序用户控件,当出现错误时会输出一条漂亮的小消息.将异常传递给此用户控件的最佳方法是什么?我在考虑使用会话变量.

有没有人有这个问题的解决方案?

谢谢

Joe*_*ton 5

这比你做的容易.创建一个名为error.aspx的页面(或任何您想要调用的页面),并在web.config中打开CustomErrors.

<configuration>
  <system.web>
    <customErrors defaultRedirect="errors.aspx"
                  mode="On">
    </customErrors>
  </system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)

处理不同的http错误或随机异常有很多可配置性.如果需要,可以将异常消息(或异常本身)转储到会话中或使用HttpServerUtility.GetLastError(文档),然后在错误页面上输出任意数量的不同消息.这甚至可以捕获您不会捕获的异常.

CustomErrors文档

编辑:
@Icarus表示OP正在寻找一个解决方案,页面继续呈现和输出,同时只在页面中显示错误消息,所以我也会提供一个答案.

我过去有几种方法可以解决这个问题.对于请求的行为是致命的非常复杂的页面(页面结果无法知道),我总是推迟到上面提到的包含主要主元素的错误页面.所以菜单,标题等都还在那里,但是大灾变的通知很明显.

您似乎要寻找的行为是我需要报告异常而不是报告常规消息的行为.我的偏好是拥有一个具有可绑定消息的公共可绑定属性的用户控件.如(原谅VB,我似乎无法找到我的C#版本):

<BrowsableAttribute(True), Bindable(False), Category("Misc"), _
    Description("Gets or sets the NavigateUrl property for the link to start a new request.")> _
Public Property MyImportantMessage() As String
    Get
        Return _myImportantMessage
    End Get
    Set(ByVal value As String)
        _myImportantMessage= value
    End Set
End Property
Run Code Online (Sandbox Code Playgroud)

然后输出可以是您喜欢的任何字符串消息,或者您可以在多个预设中编程,从资源中获取,等等.至于如何在那里获得它,我们采取了MasterPage路线.我们的母版页中有一个方法,可以直接在用户控件中分配这样的属性.为了使该方法可以被调用,使用该母版页每一页必须包括VirtualPath属性,否则该方法将不可用在编译的时候.

<%@ MasterType 
    VirtualPath="~/MasterPage.master" %>
Run Code Online (Sandbox Code Playgroud)

然后,这允许Master从页面内部调用属性来调用此属性:

'Keeping the VB theme
Me.Master.SetImportantMessage(message)
Run Code Online (Sandbox Code Playgroud)

请记住,Me.Master从页面内部不一样Page.Master.因此,您的异常将需要冒泡到实际页面,或者页面引用本身必须作为属性发送到您的usercontrols.