RedirectToAction не работает при переходе с другого веб-сайта - PullRequest
2 голосов
/ 06 мая 2020

Я работаю над проектом asp. net core MVC с интеграцией PayPal. После завершения платежа PayPal правильно перенаправляет на успешный URL-адрес (... / PayPal / PaymentSuccess). См. Метод, указанный ниже:

PayPalController

    public class PayPalController 
     {
            public IActionResult PaymentSuccess()
            {
            //code for business logic here
            TempData["Amount"] = amount; 
            return RedirectToAction("PaymentCompleted", "Home");
            }
     }

HomeController

         public class HomeController
         {
                public IActionResult PaymentCompleted()
                {
                var amount = Convert.ToDecimal(TempData["Amount"]);
                //code for business logic here
                return View();
                }
         }

Я пробовал оплатить с помощью PayPal в размещенной среде. После завершения платежа PayPal успешно активировал метод PaymentSuccess(). В этом методе мы добавили бизнес-логи c для обновления базы данных. После этого нам нужно перенаправить на другую страницу "PaymentCompleted", чтобы показать сообщение об успешном платеже.

Проблема в том, что перенаправление на страницу просмотра «PaymentCompleted», которая находится в другом контроллере (HomeController), не работает после успешного выполнения кода в методе PaymentSuccess.

Но я попытался вызвать метод PaymentSuccess() прямо в браузере, и теперь перенаправление работает.

EDIT: Я использовал 'TempData' on 'PaymentSuccess()' метод передачи оплаченной суммы для отображения на странице просмотра 'PaymentCompleted'.

Почему это происходит? Может ли кто-нибудь указать причину этой проблемы?

Любая помощь будет заметна. Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Наконец-то я нашел решение. Проблема возникает из-за того, как мы использовали TempData. Мы должны сериализовать amount перед назначением его TempData в ASP. Net Core.

TempData["Amount"] = JsonConvert.SerializeObject(amount);

Кроме того, мы должны десериализовать его перед получением TempData. Не нужно десериализовать, если это строка. Я просто показываю процедуру. Вы можете следовать приведенному ниже коду:

var amount = JsonConvert.DeserializeObject<string>(TempData["Amount"].ToString());

Но в приложении MVC нам не нужна никакая сериализация перед присвоением данных TempData.

Теперь метод RedirectionToAction() работал и Я получил оплаченную сумму методом PaymentCompleted() с помощью TempData.

0 голосов
/ 06 мая 2020

У меня раньше было то же самое с вашей проблемой.

Проблема, связанная с обработкой кода бизнес-логом c: exception, и выполнение кода не может достигнуть RedirectToAction

Вы можете добавить try/catch для обработки исключения и записать информацию, чтобы увидеть деталь

...