代码之家  ›  专栏  ›  技术社区  ›  Jamie Taylor

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

  •  1
  • Jamie Taylor  · 技术社区  · 14 年前

    我在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=“响应写入” 所以 服务器错误/默认.aspx 出错时给我发电子邮件

    任何帮助都将不胜感激

    谢谢

    杰米

    更新

    我环顾了一下网络,发现很多其他人也有同样的问题,但我找不到一个明确的答案。

    有什么想法吗

    谢谢

    杰米

    1 回复  |  直到 14 年前
        1
  •  3
  •   BradB    14 年前

    如果找不到页面,我假设您看到的是通用.NET?

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

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

    更新:

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

    如果您的网站可以通过网络访问,那么向真正的用户显示不同的错误消息是很有用的,例如,如果他们正在寻找的页面已丢失(404)或存在一些暂时性问题(500),以后再查看可能是个好主意。每一页的错误文本都应该相应地反映这一点。向搜索引擎报告适当的状态代码也很重要,以指示某个页面是否不再可用,即该页面已从项目中删除,应从搜索引擎索引中删除,或者如果存在错误,搜索引擎应返回以对该页面进行爬网。稍后,不要从索引中删除。如果不正确报告这些状态代码,则可能会通过搜索引擎降低Web应用程序的性能。通常我的web.config如下所示:

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

    注意:由于最近在.NET框架中发现了一个安全漏洞,因此设置“defaultredirect”属性非常重要(请咨询Google)。设置这是一个解决方法来堵塞孔。

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

    对于500个错误:

    Response.Status = "500 Internal Server Error"
    

    对于404错误:

    Response.Status = "404 Not Found"
    

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

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

    推荐文章