将数据传递到不使用QueryString的其他Web服务器上的URL

lha*_*han 5 c# response.redirect server.transfer query-string

我有一个.ashx处理程序,根据处理过程,在完成处理后会重定向到成功或错误页面.处理程序在我的站点中,但成功或错误页面可能不是(这是用户可以配置的).

有没有什么方法可以将错误详细信息传递给错误页面而不将其放在查询字符串中?

我试过了:

  1. 添加包含错误详细信息的自定义标头,但由于我使用的Response.Redirect是标头,标头会被清除
  2. 使用Server.Transfer,而不是Response.Redirect,但这不适用于不在我的网站中的网址

我知道我可以在查询字符串中传递数据,但在某些情况下,我需要传递的数据对于查询字符串来说可能太长了.我还有其他选择吗?

Ant*_*t P 2

本质上,不。在 GET 请求(即重定向)中传递附加数据的唯一方法是将其传递到查询字符串中。

需要意识到的重要一点是,这不是 WebForms 的限制,这只是 HTTP 的工作方式。如果您要重定向到站点外部的另一个页面(因此没有 cookie/会话数据的选项),则必须直接在请求中发送信息,这意味着使用查询字符串。

Server.Transfer诸如和 之类的东西Response.Redirect只是简单 HTTP 请求的抽象;任何框架功能都无法违背 HTTP 的实际工作原理。

当然,对于在查询字符串中传递的内容,您确实有各种选项,但您必须传递一些内容。如果你确实想缩短 URL,也许你可以传递一个错误代码并公开一个 API,让接收页面获取更多信息:

  1. 使用 ID 将事务信息(或详细的错误消息)存储在数据库中。
  2. 在查询字符串中传递 ID。
  3. 公开 Web 方法或类似的 API,以允许接收页面请求附加信息。

有很多黑客方法可以创建在表单发布之外的重定向中传递数据的错觉(例如返回包含表单和 Javascript 的页面以立即执行跨域表单发布),但查询字符串是正确在 GET 请求中传递数据的方式,那么为什么要尝试绕过它呢?