C# 带有查询字符串的转接调用调用当前页而不是给定页
我没有太多的运气发现这件事 我有一个ASP页面,该页面通过查询字符串从其他地方的代码调用:C# 带有查询字符串的转接调用调用当前页而不是给定页,c#,asp.net,C#,Asp.net,我没有太多的运气发现这件事 我有一个ASP页面,该页面通过查询字符串从其他地方的代码调用: [domainpath]/FulfilmentReceipt.aspx?fulfilmentId=226F7486-3D30-439D-92BB-94972234A809 在页面\u Load中有一个服务器.Transfer调用,该调用应将响应执行移动到另一个具有不同查询字符串的页面(下面的格式()似乎工作正常): 接下来是我不明白的地方。转账调用似乎被路由回第一页的fulfillmentreceive
[domainpath]/FulfilmentReceipt.aspx?fulfilmentId=226F7486-3D30-439D-92BB-94972234A809
在页面\u Load
中有一个服务器.Transfer
调用,该调用应将响应执行移动到另一个具有不同查询字符串的页面(下面的格式()
似乎工作正常):
接下来是我不明白的地方。转账调用似乎被路由回第一页的fulfillmentreceive.aspx,但带有新的查询字符串。这会导致一个错误,因为查询字符串的fulfillmentid
部分现在丢失。为什么不按预期调用确认收据
我可以确认confirmationreceive
页面从未通过调试调用到流程中,并且fulfillmentreceive
已加载两次。Global.asax文件中根本没有代码,因此没有路由,而且确认回执
页面本身没有重定向
或传输
调用,非常简单
此外,浏览器地址栏中呈现的错误页面显示新的查询字符串,但作为原始URL的一部分。我原以为看到的URL不应该因为Server.Transfer
而改变
有什么想法吗
非常感谢
更新
我没有取得任何真正的进展,但按照里希霍芬的建议,我得到了一些结果。当调用来自浏览器时,使用Response.Redirect
而不是Server.Transfer
确实会给出所需的结果。但是调用是由无法处理重定向响应的第三方库发出的
使用preserveForm
选项尝试Server.Transfer
。为了澄清,传输最终调用了fulfillmentreceive.aspx?bId={0}&f={1}&print=true
。错误的页面,正确的查询字符串
更多更新
通过重构confirmationreceive
页面以接受传递给fulfillmentreceive
的查询字符串,并更改服务器。Transfer
调用以简单地转移到confirmationreceive
,而不指定查询字符串,我已经解决了问题。然后,传输将使用原始查询字符串转到正确的位置
尽管出于好奇,这个问题仍然存在。仅仅是因为
Server.Transfer
无法正确处理包含查询字符串的URL吗?Server.Transfer和Response.Redirect经常混淆。如果要传递新的查询字符串值,应使用Response.Redirect
Server.Transfer更改IIS/ASP.NET正在处理的单个请求的行为。它在服务器上启动一个新请求,但对于最终用户来说,该请求仍然是同一页。实际上,您正在将控制权移交给一个新页面。您可以传递一个参数,一个布尔值,以保留表单值。但一般来说,如果要更改查询字符串路径,大多数时候都应该使用Response.Redirect,以便URL显示在用户的浏览器中(用户代理将收到302重定向,而不是200 OK)
“转接呼叫似乎被路由回FulfillmentReceive.aspx”
听起来像confirmationreceive.aspx可能重定向回“fulfillmentreceive.aspx”。但由于您没有传递“True”,因此收据查询字符串id丢失。如果将“true”作为第二个参数传递给Server.Transfer,则示例可能会起作用。但是,如果是我的代码,最好的办法是用响应来改变它。重定向并在Fiddler或其他工具中观察响应轨迹,以查看引擎盖下到底发生了什么。Server.Transfer和Response.Redirect经常混淆。如果要传递新的查询字符串值,应使用Response.Redirect Server.Transfer更改IIS/ASP.NET正在处理的单个请求的行为。它在服务器上启动一个新请求,但对于最终用户来说,该请求仍然是同一页。实际上,您正在将控制权移交给一个新页面。您可以传递一个参数,一个布尔值,以保留表单值。但一般来说,如果要更改查询字符串路径,大多数时候都应该使用Response.Redirect,以便URL显示在用户的浏览器中(用户代理将收到302重定向,而不是200 OK) “转接呼叫似乎被路由回FulfillmentReceive.aspx”
听起来像confirmationreceive.aspx可能重定向回“fulfillmentreceive.aspx”。但由于您没有传递“True”,因此收据查询字符串id丢失。如果将“true”作为第二个参数传递给Server.Transfer,则示例可能会起作用。然而,如果是我的代码,最好的办法就是用一个响应来改变它。重定向并在Fiddler或其他工具中观察响应轨迹,以查看引擎盖下到底发生了什么。正如上面最初作为更新发布的一样,我通过重构ConfirmationReceivement页面来接受传递给的查询字符串,从而解决了我的问题FulfillmentReceive并更改服务器.Transfer调用,以简单地传输到确认收据,而不指定查询字符串。然后,传输将使用原始查询字符串转到正确的位置
这并不理想,因为某些处理现在要做两次(将查询字符串转换为更有用的内容)但是它工作得很好,所以我很高兴。正如上面作为更新发布的一样,我通过重构ConfirmationReceive页面来接受传递给FulfillmentReceive的查询字符串并更改服务器来解决我的问题。Transfer call只需转移到ConfirmationReceive,而不指定查询字符串。然后,传输将使用原始查询字符串转到正确的位置 这并不理想,因为有些处理现在要做两次(将查询字符串转换为m)
Server.Transfer(String.Format("confirmationReceipt.aspx?bId={0}&f={1}&print=true", basketId, franchiseeId)))