RedirectToAction is not working while navigating from another website

Viewed 142

I am working on an asp.net core MVC project with PayPal integration. After completing the payment, the PayPal correctly redirect to the success URL (.../PayPal/PaymentSuccess). Please see the method given below:

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();
                }
         }

I have tried a payment using PayPal in the hosted environment. After completing the payment the PayPal successfully invoked the PaymentSuccess() method. In this method, we have added the business logic for database updation. After this we need to redirect to another page "PaymentCompleted" to show the payment success message.

The issue is that the redirection to the view page "PaymentCompleted" which is in another controller (HomeController) is not working after successfully executing the code in PaymentSuccess method.

But, I have tried to invoke the PaymentSuccess() method directly in the browser and now the redirection is working.

EDIT: I have used a 'TempData' on 'PaymentSuccess()' method for passing paid amount to display on the 'PaymentCompleted' view page.

Why does this happen? Can anyone specify the reason behind this problem?

Any help would be appreciable. Thank You!

2 Answers

I had same with your issue before.

The problem the code handle business logic is exception and code runing can not reach RedirectToAction

You can add try/catch to handle exception, and log information to see detail

Finally, I got the solution. The issue is happened because of the way we used the TempData. We have to serialize the amount before assigning it to TempData in ASP.Net Core.

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

Also, we have to deserialize it before retrieving the TempData. No need to deserialize if it is string. I just showing the procedure. You can follow the below code:

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

But in MVC application, we don't need any serialization before assigning data to TempData.

Now the RedirectionToAction() method worked and I retrieved the paid amount on the PaymentCompleted() method using TempData.

Related