【问题标题】:Custom 404 error not redirecting properly自定义 404 错误未正确重定向
【发布时间】:2010-09-27 11:33:46
【问题描述】:

我的 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 在出现错误时向我发送电子邮件

任何帮助将不胜感激

谢谢

杰米

更新

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

任何想法

谢谢

杰米

【问题讨论】:

  • 如果你试图打开 nonexistingpage.htm 它应该不会工作,这就是它的样子,除非你使用 IPM。
  • 什么是 IPM?对不起,我是新手

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


【解决方案1】:

我假设您在找不到页面时看到的是通用 .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.config 如下所示:

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

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

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

对于 500 个错误:

Response.Status = "500 Internal Server Error"

对于 404 错误:

Response.Status = "404 Not Found"

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

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

【讨论】:

  • 嗨,我试过了,但仍然给我找不到通用页面错误
  • 这绝对适合我。顺便问一下,您的应用程序是否面向网络,即您希望它可以通过搜索引擎获得?
  • 嗨,是的,它可以通过搜索引擎获得,请查看我发布的答案,这似乎解决了我的问题
  • @Jamie - 我刚刚更新了我的原始答案。可能有用,另外我详细说明了为什么我询问您的应用程序是否面向网络并通过搜索引擎提供。
  • 我现在已经找到了一种在 Global.asax 文件中发送电子邮件的方法,并且我的页面现在按照它们应该的方式重定向,而不管我尝试哪种方式都不需要使用 redirectMode="ResponseRewrite"这似乎打破了它
猜你喜欢
  • 2013-06-18
  • 2018-03-20
  • 2015-08-01
  • 2011-11-30
  • 2018-04-18
  • 2016-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多