0

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

Server.ClearError();
string Redir = Settings["Custom404Page"];
Server.Transfer(Redir);

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.

有人对此有解决方案吗?我可以这样使用Server.Transfer吗?

4

1 回答 1

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 页的请求的 Asp.dll 文件。

于 2013-07-25T14:23:13.620 回答