自定义404错误未正确重定向

时间:2010-09-27 11:33:46

标签: asp.net email custom-errors server-error

我在我的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向我发送电子邮件

非常感谢任何帮助

由于

杰米

更新

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

任何想法

由于

杰米

1 个答案:

答案 0 :(得分: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

的免费应用程序