【发布时间】:2015-05-11 05:36:26
【问题描述】:
亲爱的贝宝,
我想知道为什么调用Response.AppendHeader 时“返回重定向网址”页面无法加载。你看,我试图在用户在 paypal 的页面上付款后自动下载文件,所以我将以下代码放在我的 Page_Load 上
If Not IsNothing(Request.QueryString("paymentId")) Then
Dim paypalUtils As New PayPalUtils
paypalUtils.ProcessPayPalResponse(Request.QueryString("paymentId").ToString(), Request.QueryString("PayerID").ToString())
TransmitFile()
End If
我的TransmitFile 实现很简单
Protected Sub TransmitFile()
Response.ContentType = "application/sla"
Response.AppendHeader("Content-Disposition", "attachment; filename=" & Path.GetFileNameWithoutExtension(hidFileName.Value) & ".stl")
Response.TransmitFile(Sistema.SavePath & Path.GetFileNameWithoutExtension(hidFileName.Value) & ".stl")
Response.End()
End Sub
问题是,以某种方式调用Response.AppendHeader 或以下任何行会阻止贝宝正确重定向到我在 API 上指定的正确 url。
如果我在 Page_Load 上评论 TransmitFile,一切都会按预期进行(Paypal 会将我重定向到我的网站)。如果没有,我成功地自动下载文件,但我卡在这个页面上
我做错了什么?
【问题讨论】:
-
如果我正确理解您的代码,您是从 PayPal 重定向传输
Response中的文件吗?或者您的paypalUtils.ProcessPayPalResponse(...)调用是否完成了收到的响应并在调用TransmitFile()之前重定向到您应用中的另一个页面? -
是的。我正在从贝宝的重定向中传输
Response中的文件。paypalUtils.ProcessPayPalResponse(...)唯一要做的就是执行付款 -
在这种情况下,当您设置
Response.TransmitFile()时,您的应用程序会在您的应用程序处理传入请求时尝试将文件作为响应发送回 PayPal。它停留在“正在加载”的原因可能是因为 PayPal 网站上没有设置任何内容来响应这种类型的响应。您需要一个Response.Redirect()来响应文件的内部页面,以便买家获取文件。 -
好的,我创建了一个名为 PaymentProcessor.aspx 的页面,该页面仅将
Response.Redirect()转换为 Default.asp(具有Response.TransmitFile()的页面)。我将 paypal 的返回重定向 URL 更改为 PaymentProcessor.aspx,然后我'我仍然得到同样的错误。贝宝永远加载页面。我调试并且 PaymentProcessor.aspx Page_Load 执行得很好。它重定向到 Default.aspx 没有问题,但是。我再也看不到任何页面(除了贝宝加载的东西) -
经过更多测试,我意识到我之前的评论可能并不完全正确。 :P 该文件看起来确实可以下载;但是,问题在于下载后重定向到页面。关键实际上是首先在页面的
<head>部分显示带有<meta http-equiv="refresh" ... />标记的页面,然后刷新页面并启动下载。我会看看我是否可以为你整理一个更详细的答案。
标签: .net vb.net redirect paypal paypal-sandbox