Server.Transfer无法在Application_Error中工作

时间:2014-03-14 10:03:15

标签: c# asp.net iis http-status-code-404 server.transfer

我正在重定向到错误404页面,并希望发出404作为Google引擎的响应代码。

我们在生产环境中使用 IIS 6 :(

代码在Application_Error()

中的Global.ascx.cs中执行404处理
if ((ex is HttpException && 404 == ((HttpException)ex).GetHttpCode()))
 {
    //Server.Transfer("~/404.aspx"); // Error with session state 
    Server.TransferRequest("~/404.aspx"); //This operation requires IIS 7 
    //Response.Redirect("~/404.aspx"); It will issue 302 then 404
     return;
 }

Server.Transfer的

  

会话状态只能在enableSessionState设置为true时使用,   在配置文件中或在Page指令中。还请   确保System.Web.SessionStateModule或自定义会话状态   模块包含在<configuration>\<system.web>\<httpModules>中   应用程序配置中的部分。

的Response.Redirect

  

问题302,因为它进行客户端重定向,然后是404.我想   跳过302

Server.TransferRequest

  

此操作需要IIS集成管道模式

Global.asax Error handling: Quirks of server.transfer

如何在IIS 6中解决此问题?

为什么我会遇到Server.Transfer的会话问题?是否有正当理由或ASP.Net Framework中存在错误?

1 个答案:

答案 0 :(得分:-2)

如果您仍需要正确的404重定向,则可以使用以下代码:

Response.AddHeader("Location", "~/404.aspx");
Response.Status = "404 Not found";