代码之家  ›  专栏  ›  技术社区  ›  Amit

服务器。传输在执行子请求时引发错误。如何解决?

  •  29
  • Amit  · 技术社区  · 14 年前

    我有一个 HttpModule 在C 2.0中,它处理抛出的异常。每当抛出异常时,都会调用一个带有查询字符串的错误页(ASPX)。已经完成了 Server.Transfer() .

    但当控件尝试执行时 server.transfer()。 ,引发以下异常:

    执行[pagename].aspx的子请求时出错。

    反之 Request.Redirect() 工作良好。

    我尝试设置 EnableViewStateMac="false" 在请求传输到的页的页指令中。问题依然存在。

    这是我尝试的代码:

    string errorPage = "errorpage.aspx?id=" + someErrorId
    HttpContext.Current.Server.Transfer(errorPage,true);
    

    你知道怎么解决这个问题吗?

    7 回复  |  直到 8 年前
        1
  •  18
  •   Owen Blacker Aditya    10 年前

    我找到了一个服务器的替代方案。transfer()。

    我用过

     HttpContext.Current.RewritePath("somefile.aspx");
    

    这解决了问题。

        2
  •  10
  •   Community miroxlav    7 年前

    我正在连接请求管道 OnPrerequestHandlerExecute(OnPrerequestHandlerExecute) 事件,发现我无法使用server.transfer,因为它在执行子请求时引发了与您相同的错误。

    使用httpContext.current.rewritePath不起作用,因为它似乎被忽略了,而且我没有重定向到任何地方。

    如果您使用的是IIS 7及更高版本,则可以使用 服务器.传输请求 相反,这对我有好处。

    这两种方法之间的差异包含在这个答案中: TransferRequest vs Transfer in ASP.Net

        3
  •  8
  •   ray    10 年前

    我的修复方法不同:

    生成的联机查询 this Microsoft Knowledge Base article 说明决议将使用 响应。重定向 而不是 服务器传输 .

    我改变了命令,得到了一个更准确的“ 404错误消息 “而不是神秘的” 执行子请求时出错 “消息。

    这导致我检查了重定向字符串,我注意到我的路径是关闭的。

    我修复了从“errorpage.aspx”到“../errorpage.aspx”的传输字符串(注意路径更改),以及 服务器传输 工作很好。

        4
  •  4
  •   atconway    12 年前

    如果在调试期间在vs.net IDE中碰巧看到此异常,请至少继续执行一次,然后按F5继续调试。在我的例子中,实际的页面呈现了ASP.NET异常 真正地 引发问题。在我的情况下,我的格式不正确 asp:ChangePassword 控制权 事实上 导致“执行子请求时出错”异常。

        5
  •  0
  •   Jamie    14 年前

    这不是一个bug,而是设计出来的。见 http://support.microsoft.com/kb/320439

        6
  •  0
  •   Ben    10 年前

    server.transfer(“mywebpage.aspx”)。 似乎只有当会话已经存在时才有效。

    如果没有会话启动,它将引发此错误,因此必须使用 响应。重定向 或者其他方法。

        7
  •  0
  •   Tevin    8 年前

    我也遇到了同样的问题,发现这与服务器的相对路径有关。传输正在运行,以及您要重定向到的位置。在我的例子中,这是在一个子目录中执行的,所以@ray的答案(在URL的开头添加../)起作用。但是,当我在上面的目录中执行时,同样的事情发生了。因此,我改为使用根路径:

    Server.Transfer("~/errorpage.aspx")