1

我的 web.config 文件中有这个自定义错误重定向,但它似乎没有工作,因为我添加了redirectMode="ResponseRewrite"

它适用于 500 错误但不适用于 404(当我有 404 时它不会重定向)

这是来自的代码web.config

<customErrors mode="On" redirectMode="ResponseRewrite"> 
   <error statusCode="404" redirect="/servererror/default.aspx" /> 
   <error statusCode="500" redirect="/servererror/default.aspx" /> 
</customErrors>

这是我的servererror/default.aspx代码

Dim err As System.Exception = Server.GetLastError()

Dim Errormail = New MailMessage

     'Send email to Bondholder using email address from form
     Errormail.To           = "email@email.co.uk"

     Errormail.From         = "servererror@email.co.uk"
     Errormail.Subject      = "Server Error Alert"
     Errormail.BodyFormat   = MailFormat.Text
     Errormail.Priority     = MailPriority.Normal
     Errormail.Body         = ("Error on page - " & err.InnerException.Message & vbcrlf & vbcrlf & "URL of the page - " & Request.Url.ToString())

     SmtpMail.SmtpServer    = "localhost"

     SmtpMail.Send(Errormail)

我需要保留,redirectMode="ResponseRewrite"以便servererror/default.aspx在出现错误时向我发送电子邮件

任何帮助将非常感激

谢谢

杰米

更新

我浏览了网络,发现很多其他人有同样的问题,但我找不到明确的答案。

有任何想法吗

谢谢

杰米

4

1 回答 1

3

我假设您在找不到页面时看到的是通用 .NET?

解决方法如下。注意为路径添加了 ~:

    <customErrors mode="On" redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/servererror/default.aspx"/>
        <error statusCode="500" redirect="~/servererror/default.aspx"/>
    </customErrors>

更新:

虽然您的解决方案有效,但它有点 hacky - 特别是您使用会话状态的方式在大型应用程序或其他更有经验的开发人员中会不受欢迎。我建议将 500 和 404 错误拆分到不同的页面上。

如果您的网站可通过网络访问,则向真实用户显示不同的错误消息很有用,即他们正在寻找的页面是否已消失 (404) 或存在一些临时问题 (500),检查一下可能是个好主意晚点回来。每页的错误文本应相应地反映这一点。向搜索引擎报告适当的状态代码以指示页面是否不再可用也很重要,即它已从您的项目中删除并且应该从搜索引擎索引中删除,或者是否存在错误并且搜索引擎应该稍后返回以抓取页面,而不是从索引中删除。未正确报告这些状态代码可能会通过搜索引擎影响您的网络应用程序的性能。通常我的 web.config 如下所示:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
    <error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>

注意:由于最近在 .NET Framework 中发现了一个安全漏洞(询问 Google),因此设置“defaultRedirect”属性很重要。设置这是一种解决方法来堵住漏洞。

要将正确的 HTTP 状态代码报告回客户端(和搜索引擎机器人),您可以使用以下代码。只需将它们放在相关页面的页面加载事件中:

对于 500 个错误:

Response.Status = "500 Internal Server Error"

对于 404 错误:

Response.Status = "404 Not Found"

您现在可以从 Global.asax 中删除代码,并为您的错误电子邮件逻辑创建一个可以从每个页面调用的共享函数。如果你愿意,你可以将上面的代码合并到你现有的错误页面中,但是我总是喜欢把它们分开,因为我觉得它更整洁。

如果您想测试页面的 HTTP 状态代码,我建议您查看一个名为Fiddler的免费应用程序

于 2010-09-27T14:41:17.190 回答