哦亲爱的贝宝,
我想知道为什么"返回重定向网址"如果我致电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会将我重定向到我的网站)。如果没有,我成功地自动下载文件,但是我被困在这个页面上
我做错了什么?
答案 0 :(得分:0)
您的代码实际上是正确的下载方式 - 它只是.NET如何处理导致混淆的文件传输,重定向和页面显示。
您可以选择一些选项,具体取决于您希望在您的网站上获得体验的方式。
使用AJAX和iFrames在显示重定向页面时异步下载文件。 See this StackOverflow question了解更多答案。指向walkthrough on Encosia的链接非常详细,可以提供良好的用户体验。
重定向到设置为自动刷新的页面,并在自动刷新时下载。这绕过了使用Response.TransmitFile()
和Response.End()
的.NET限制,因此无法然后使用Response.Redirect()
。要执行自动刷新,请将以下行添加到HTML源代码的<head>
部分:
<meta http-equiv="refresh" content="1; url=<%= this.RedirectUrl %>">
this.RedirectUrl
引用页面后面的代码中的属性,该属性设置为您希望重定向的位置。处理完重定向后,就是在运行代码发送文件时。
我能够测试#2并使其正常工作。我确信还有更多的可能性,但希望这会让事情适合你。