我没有太多运气找到关于这个的很多信息……</p>
我有一个 ASP 页面,它是从其他地方的代码中调用的,带有一个查询字符串:
[domainpath]/FulfilmentReceipt.aspx?fulfilmentId=226F7486-3D30-439D-92BB-94972234A809
在Page_Load
有一个Server.Transfer
调用应该将响应执行移动到具有不同查询字符串的另一个页面(Format()
顺便说一句,下面似乎可以正常工作):
Server.Transfer(String.Format("confirmationReceipt.aspx?bId={0}&f={1}&print=true", basketId, franchiseeId)))
接下来是我不明白的一点。转接呼叫似乎被路由回FulfilmentReceipt.aspx,即第一页,但带有新的查询字符串。这会导致错误,因为fulfilmentId
现在缺少查询字符串的一部分。为什么这没有confirmationReceipt
按预期调用?
我可以通过调试进程来确认该confirmationReceipt
页面永远不会被调用,并且fulfilmentReceipt
加载了两次。Global.asax文件中根本没有代码,因此那里没有路由,confirmationReceipt
页面本身没有Redirect
或Transfer
调用,非常简单。
此外,浏览器地址栏中呈现的错误页面显示了新的查询字符串,但作为原始 URL 的一部分。我曾认为看到的 URL 不应该因为Server.Transfer
.
有任何想法吗?
非常感谢。
更新
我没有取得任何真正的进展,但听从里希霍芬的建议,我得到了一些结果。当调用来自浏览器时,使用Response.Redirect
而不是Server.Transfer
提供所需的结果。但是调用是由无法处理重定向响应的第三方库进行的。
尝试Server.Transfer
使用该preserveForm
选项没有任何区别。为了澄清,转移最终调用FulfilmentReceipt.aspx?bId={0}&f={1}&print=true
. 错误的页面,正确的查询字符串。
更多更新
我已经通过重构confirmationReceipt
页面以接受传递给的查询字符串fulfilmentReceipt
并将Server.Transfer
调用更改为简单地转移到confirmationReceipt
而不指定查询字符串来解决我的问题。传输比使用原始查询字符串转到正确的位置。
尽管出于好奇,这个问题仍然存在。只是Server.Transfer
不能正确处理包含查询字符串的网址吗?