自定义404错误未正确重定向
-
25-09-2019 - |
题
我在我的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
有错误时给我发送电子邮件
任何帮助将非常感激
谢谢
杰米
更新
我环顾了网络,发现了很多其他人遇到相同问题的人,但我找不到确定的答案。
有任何想法吗
谢谢
杰米
解决方案
我认为当找不到页面时,您正在看到通用.NET?
解决方案如下。请注意〜为路径的添加:
<customErrors mode="On" redirectMode="ResponseRewrite">
<error statusCode="404" redirect="~/servererror/default.aspx"/>
<error statusCode="500" redirect="~/servererror/default.aspx"/>
</customErrors>
更新:
尽管您的解决方案可以使用,但这有点骇人听闻 - 特别是您使用会话状态的方式将在大规模应用中或其他更经验的开发人员中皱眉。我建议将500和404错误分为不同页面。
如果您的网站通过网络可用,则很有用向真实用户显示不同的错误消息。晚点回来。错误的文本每个页面都应相应地反映这一点。向搜索引擎报告适当的状态代码也很重要,以指示页面是否不再可用,即已从您的项目中删除,应该从搜索引擎索引中删除,或者是否存在错误,搜索引擎应应稍后返回到爬网,而不是从索引中删除。未正确报告这些状态代码可能会通过搜索引擎损害您的Web应用程序的性能。通常我的web.config读取如下:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/GenericError.aspx">
<error statusCode="404" redirect="~/NotFound.aspx"/>
</customErrors>
注意:由于.NET框架中最近发现的安全孔(询问Google),因此将“ DefaultreDirect”属性集(询问Google)组成很重要。设置这是堵塞孔的解决方法。
要将适当的HTTP状态代码报告回客户端(和搜索引擎机器人),您可以使用以下代码。只需将它们放入相关页面的页面加载事件中:
对于500个错误:
Response.Status = "500 Internal Server Error"
对于404个错误:
Response.Status = "404 Not Found"
现在,您可以从global.asax删除代码,并为您的错误电子邮件逻辑创建一个共享功能,可以从每个页面调用。如果您愿意,可以将上述代码合并到您现有的错误页面中,但是,我总是更喜欢将它们分开,因为我觉得它不整洁。
如果要测试页面的HTTP状态代码,我建议您查看一个免费的申请 提琴手