从另一个网站导航时,RedirectToAction 不起作用

RedirectToAction is not working while navigating from another website

我正在开发一个集成了 PayPal 的 asp.net 核心 MVC 项目。完成支付后,PayPal正确重定向成功URL(.../PayPal/PaymentSuccess)。请看下面给出的方法:

PayPalController

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

家庭控制器

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

我尝试过在托管环境中使用 PayPal 付款。 完成付款后,PayPal 成功调用了 PaymentSuccess() 方法。在这个方法中,我们添加了数据库更新的业务逻辑。在此之后我们需要重定向到另一个页面 "PaymentCompleted" 以显示付款成功消息。

问题是在成功执行 PaymentSuccess 方法中的代码后,无法重定向到另一个控制器 (HomeController) 中的视图页面 "PaymentCompleted"。

但是,我尝试直接在浏览器中调用 PaymentSuccess() 方法,现在重定向正常了。

编辑: 我在 'PaymentSuccess()' 上使用了 'TempData' 方法来传递支付金额以显示在 'PaymentCompleted' 视图页面上。

为什么会这样?任何人都可以说明这个问题背后的原因吗?

任何帮助都将不胜感激。谢谢!

我之前也遇到过你的问题。

代码处理业务逻辑的问题是exception,代码运行不到RedirectToAction

可以添加try/catch处理异常,记录信息查看详情

终于,我得到了解决方案。问题的发生是因为我们使用 TempData 的方式。我们必须先序列化 amount,然后再将其分配给 ASP.Net Core 中的 TempData。

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

此外,我们必须在检索 TempData 之前对其进行反序列化。如果它是字符串,则无需反序列化。我只是展示程序。您可以按照以下代码:

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

但是在 MVC 应用程序中,我们在将数据分配给 TempData 之前不需要任何序列化。

现在 RedirectionToAction() 方法起作用了,我使用 TempData 在 PaymentCompleted() 方法上检索了支付金额。