自定义404页面基于动态Url - Server.Transfer抛出错误转移到动态页面

时间:2013-07-25 14:18:37

标签: asp.net redirect http-status-code-404 response

我捕获了网站上的所有错误,并根据某些信息生成电子邮件。我在Global.asax的{​​{1}}中执行此操作。我已经实现了一些代码来捕获Application_Error错误,此时它将执行以下操作:

404

Redir将会像Server.ClearError(); string Redir = Settings["Custom404Page"]; Server.Transfer(Redir); 一样出现,但当我将其传递给PageContent/123/404_Not_Found.html时,我收到了错误消息:

Server.Transfer

我不想使用Error executing child request for PageContent/123/404_Not_Found.html ,因为我需要确保维护Response.Redirect的状态代码,而使用404时似乎不会这样。

有没有人有解决方案?我可以这样使用Response.Redirect吗?

1 个答案:

答案 0 :(得分:1)

您无法将Server.Transfer指向静态页面。您需要将其指向.aspx页面以使其正常工作。

如果您确实想要使用HTML页面,则需要打开HTML文件,读取其内容,对其进行缓存并使用Response.Write输出,同时保留404响应标题。

请参阅:http://support.microsoft.com/kb/320439

  

Microsoft Internet信息服务(IIS)发送   Server.Transfer或Server.Execute请求到相应的   Internet服务器应用程序编程接口(ISAPI)扩展   基于请求文件的扩展名。例如,一个请求   将.aspx页面分派给Aspnet_isapi.dll ISAPI   扩展

     

将请求分派到适当的ISAPI扩展后,   ISAPI扩展无法调用另一个ISAPI扩展。你收到了   由于“症状”部分中列出的错误消息   处理对ASP.NET页面的请求的Aspnet_isapi.dll文件不能   将请求转发到Asp.dll文件,该文件处理对ASP的请求   页。