Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从其他网站导航时,RedirectToAction不起作用_C#_Asp.net Core_Redirect_Paypal_Tempdata - Fatal编程技术网

C# 从其他网站导航时,RedirectToAction不起作用

C# 从其他网站导航时,RedirectToAction不起作用,c#,asp.net-core,redirect,paypal,tempdata,C#,Asp.net Core,Redirect,Paypal,Tempdata,我正在从事一个asp.net核心MVC项目与PayPal集成。完成支付后,PayPal将正确重定向到成功URL(…/PayPal/PaymentSuccess)。请参阅下面给出的方法: PayPalController public class PayPalController { public IActionResult PaymentSuccess() { //code for business lo

我正在从事一个asp.net核心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");
            }
     }
         public class HomeController
         {
                public IActionResult PaymentCompleted()
                {
                var amount = Convert.ToDecimal(TempData["Amount"]);
                //code for business logic here
                return View();
                }
         }
HomeController

    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'
查看页面上

为什么会发生这种情况?有人能说明这个问题背后的原因吗


任何帮助都是值得的。谢谢大家!

我以前对你的问题也有同样的看法

代码处理业务逻辑的问题是
异常
,代码运行无法到达
重定向到操作


您可以添加
try/catch
来处理异常,并记录信息以查看详细信息

最后,我得到了解决方案。问题的出现是因为我们使用
TempData
的方式。我们必须先序列化
数量
,然后才能将其分配给ASP.Net Core中的TempData

TempData["Amount"] = JsonConvert.SerializeObject(amount);
此外,我们必须在检索TempData之前对其进行反序列化。如果是字符串,则无需反序列化。我只是演示一下程序。您可以按照以下代码进行操作:

var amount = JsonConvert.DeserializeObject<string>(TempData["Amount"].ToString());
var amount=JsonConvert.DeserializeObject(TempData[“amount”].ToString());
但在MVC应用程序中,在将数据分配给TempData之前,我们不需要任何序列化


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

谢谢您的回答。我已经添加了try/catch。但它没有显示任何例外。我尝试在托管环境中调试(使用IIS),它指向RedirectToAction()方法。但不重定向:(你没有得到任何异常?你能显式地将[HttpGet]添加到PaymentCompleted controller操作中吗?也许这会有帮助。它没有显示任何异常。好的,我会试试。谢谢:)@Wouter我试过了。但仍然显示相同。你是如何触发PaymentSuccess方法的?(这可能是关键点)。建议您调试PaymentSuccess中的代码,以确认断点是否可以转到RedirectToAction代码。@YongqingYu。我们已使用Paypal中的按钮生成器功能创建了付款按钮。在按钮生成期间,我们可以指定必要的URL,例如支付成功、取消和其他可选URL。因此,当我们进行支付时,贝宝本身会调用相应的方法。