【问题标题】:Server.Transfer to an HttpHandlerServer.Transfer 到 HttpHandler
【发布时间】:2011-07-28 20:08:06
【问题描述】:

我有一个带有以下 ProcessRequest 方法的 IHttpHandler:

public void ProcessRequest(HttpContext context) {
    int id = Convert.ToInt32(context.Request.QueryString["id"] + 151);
    var xml = XDocument.Parse("<xml><cartid>" + id + "</cartid></xml>");
    context.Response.Write(xml);
}

我试图从一个 aspx 页面使用如下:

protected void Page_Load(object sender, EventArgs e) {
    order o = new order();
    Server.Transfer(o, false);
}

我收到一个 HttpException:执行处理程序“PostTest.order”的子请求时出错。

如果我改为尝试像这样进行传输:

Server.Transfer("~/order.ashx?id=65", false)

我收到一个 HttpException:执行 /order.ashx 的子请求时出错。

我做错了还是有其他方法可以完成我想要的?

【问题讨论】:

  • 使用 Response.Redirect() 有什么问题吗?
  • aspx 页面正在接收来自另一台服务器(不是用户浏览器)的数据的 POST,我不确定它是否会进行重定向,但我会尝试。
  • 为什么不直接让您的其他服务器调用处理程序,并将必要的逻辑从您的 ASPX 页面移到那里? ASPX 页面并不能真正成为另一个服务器调用的良好端点。
  • 这不是我们的服务器,而且其他公司的人员也没有什么帮助,所以我试图解决这个问题。我可能最终会要求他们更改链接,但我认为有人可能知道快速解决方案。
  • 可以将逻辑粘贴在 ASPX 页面中,从您的 Page_Load 方法调用 Response.Clear(),然后使用与处理程序中相同的逻辑直接处理从那里的调用。丑陋,但应该在紧要关头工作。

标签: c# asp.net httphandler


【解决方案1】:

只需传递上下文:

var handler = new order();
handler.ProcessRequest(Context);
Response.End();

【讨论】:

  • 这真的很酷。我已经使用 ASP.NET 多年但不知道这一点。
  • 使用上面的代码我可以在请求中传递一些东西并从处理程序中获取响应
  • 这很好,除非您想从处理程序访问查询字符串(查询字符串将是当前页面之一,与您使用 Server.Transfer 获得的不同)。我想别无选择……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多