2015-03-09 4 views
0

Oh dear paypal,Почему paypal Redirect выполняется после Page_Load?

Хотелось бы знать, почему страница «return redirect Url» не будет загружаться, если я позвоню 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 на правильный URL-адрес, указанный мной в API.

Если я прокомментирую TransmitFile на странице_Load, все будет работать должным образом (Paypal перенаправляет меня на мой сайт). Если нет, то я успешно сделать загрузку файлов автоматически, но я застрял на этой странице

enter image description here

Что такое, что я делаю неправильно?

+0

Если я правильно понял ваш код, вы передаете файл в «Response» из перенаправления PayPal? Или ваш 'paypalUtils.ProcessPayPalResponse (...)' вызывает завершение полученного ответа и перенаправление на другую страницу вашего приложения до вызова 'TransmitFile()'? –

+0

Да. Я передаю файл в 'Response' из переадресации Paypal .. Единственное, что' paypalUtils.ProcessPayPalResponse (...) 'does выполняет платеж –

+1

В этом случае, когда вы устанавливаете' Response.TransmitFile() ', ваше приложение пытается отправить файл в ответ на PayPal, когда ваше приложение обрабатывает входящий запрос.Причина, по которой он застрял на «Загрузка», скорее всего, потому что на сайте PayPal, который настроен для ответа на этот тип ответа, нет ничего. Вам нужна «Response.Redirect()» на внутреннюю страницу, которая отвечает файлом, чтобы покупатель получил файл. –

ответ

0

Ваш код действительно правильный в том, как выполняется доставка - именно так .NET обрабатывает передачу файлов, перенаправление и отображение страницы, что вызывает путаницу.

У вас есть несколько вариантов в вашем распоряжении, в зависимости от того, как вы хотите, чтобы опыт был на вашем сайте.

  1. Используйте AJAX и iFrames для асинхронной загрузки файла при отображении страницы переадресации. See this StackOverflow question для получения дополнительных ответов. Ссылка на walkthrough on Encosia очень подробно и должна сделать приятный пользовательский интерфейс.

  2. Перенаправить на страницу, которая настроена на автоматическое обновление и скачивание при автоматическом обновлении. Это обходит ограничение .NET, которое с использованием Response.TransmitFile() и Response.End() делает невозможным , затем использовать Response.Redirect(). Чтобы сделать автоматическое обновление, необходимо добавить следующую строку в <head> части исходном коде HTML:

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

    this.RedirectUrl ссылки свойства в коде позади страницы, которая устанавливается на месте, куда вы хотите перенаправлять идти , После этого перенаправление обрабатывается, когда вы запускаете свой код для отправки файла.

Я был в состоянии проверить # 2 и получил его работу. Я уверен, что есть еще больше возможностей, но, надеюсь, это должно заставить вас работать.

+0

Хорошо, давайте сосредоточимся на втором решении (тот, который вы тестировали). Я использовал эту строку '' как вы сказали, и я могу иметь paypal rederiect me to 'PaymentProcessor.aspx', проблема заключается в том, что по мере того, как я перенаправляюсь на' Default.aspx', 'Default.aspx.vb'' Page_Load' выполняется, и файл загружается правильно, но Default.aspx никогда не перерисовывается, а URL-адрес браузера все равно свиноматки 'PaymentProcessor.aspx' Что не так? –

+0

Здесь вам нужно будет поиграть, с помощью которых отображаются страницы, чтобы заставить их работать так, как вы хотите. 'Url' в теге' '- это, по сути, страница, которая доставляет файл, поэтому я не буду полагаться на то, что это целевая страница для пользователя. Решение AJAX может быть лучшим решением для этого, потому что вы могли бы создать сценарий переадресации после того, как файл будет доставлен, но я не слишком хорошо знаком с этим, к сожалению. –

Смежные вопросы