2010-09-27 119 views
1

我有这样的自定义错误在我的web.config文件重定向但它似乎并没有工作,因为我加入了redirectMode="ResponseRewrite"自定义404错误不正确重定向

它工作正常的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 protected]" 

    Errormail.From   = "[email protected]" 
    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给我发来电子邮件时有一个错误

任何帮助,将不胜感激

感谢

杰米

UPDATE

我看了一下网页,发现不少其他人有相同的问题,但我找不到明确的答案。

任何想法

感谢

杰米

+0

如果你试图打开nonexistingpage.htm它不应该工作的免费应用程序页面的HTTP状态代码,这是怎么回事,除非如果你使用IPM。 – Tomasi 2010-09-27 14:37:45

+0

什么是IPM?对不起,我是一个新手 – 2010-09-27 15:38:58

回答

3

我相信你所看到的普通的.NET时,页面无法找到?

解决方案如下所示。注意添加〜为路径:

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

UPDATE:

虽然你的解决方案的工作,这是一个有点哈克 - 尤其是你已经使用会话状态的方法是皱起了眉头大规模应用或其他更经验丰富的开发人员。我建议将500和404错误分解到不同的页面上。

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

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

注意:它有“defaultRedirect”属性设置很重要,因为在.NET Framework(问谷歌)在最近发现的安全漏洞。设置这是一个解决方案来堵塞漏洞。

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

500错误:

Response.Status = "500 Internal Server Error" 

404错误:

Response.Status = "404 Not Found" 

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

如果你想测试我建议考虑看看所谓Fiddler

+0

嗨我试过,但仍然给我的通用页面无法找到错误 – 2010-09-27 15:38:40

+0

这绝对适合我。顺便说一下,您的应用程序面向网络,即您希望通过搜索引擎提供它吗? – BradB 2010-09-27 15:45:53

+0

嗨是啊它是通过搜索引擎可以看到我的回答我发布了似乎解决了我的问题 – 2010-09-27 16:32:46