为什么在Page_Load之后执行paypal重定向?

时间:2015-03-09 22:03:10

标签: .net vb.net redirect paypal paypal-sandbox

哦亲爱的贝宝,

我想知道为什么"返回重定向网址"如果我致电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或以下任何行会阻止paypal正确重定向到我在API上指定的正确URL。

如果我评论Page_Load上的TransmitFile,一切都按预期工作(Paypal会将我重定向到我的网站)。如果没有,我成功地自动下载文件,但是我被困在这个页面上

enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:0)

您的代码实际上是正确的下载方式 - 它只是.NET如何处理导致混淆的文件传输,重定向和页面显示。

您可以选择一些选项,具体取决于您希望在您的网站上获得体验的方式。

  1. 使用AJAX和iFrames在显示重定向页面时异步下载文件。 See this StackOverflow question了解更多答案。指向walkthrough on Encosia的链接非常详细,可以提供良好的用户体验。

  2. 重定向到设置为自动刷新的页面,并在自动刷新时下载。这绕过了使用Response.TransmitFile()Response.End()的.NET限制,因此无法然后使用Response.Redirect()。要执行自动刷新,请将以下行添加到HTML源代码的<head>部分:

    <meta http-equiv="refresh" content="1; url=<%= this.RedirectUrl %>">
    

    this.RedirectUrl引用页面后面的代码中的属性,该属性设置为您希望重定向的位置。处理完重定向后,就是在运行代码发送文件时。

  3. 我能够测试#2并使其正常工作。我确信还有更多的可能性,但希望这会让事情适合你。