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

Posted

技术标签:

【中文标题】从另一个网站导航时 RedirectToAction 不起作用【英文标题】:RedirectToAction is not working while navigating from another website 【发布时间】:2020-08-21 00:08:44 【问题描述】:

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

贝宝控制器

    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() 方法。在这个方法中,我们添加了数据库更新的业务逻辑。之后我们需要重定向到另一个页面"PaymentCompleted"来显示支付成功的信息。

问题是成功执行 PaymentSuccess 方法中的代码后,重定向到另一个控制器 (HomeController) 中的视图页面“PaymentCompleted”不起作用。

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

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

为什么会这样?谁能说明这个问题背后的原因?

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

【问题讨论】:

你没有得到任何异常?您能否将 [HttpGet] 显式添加到 PaymentCompleted 控制器操作,也许会有所帮助。 它没有显示任何异常。好的,我会试试的。谢谢:) @Wouter 我试过了。但仍然显示相同。 您是如何触发 PaymentSuccess 方法的? (这可能是关键点)。建议您在 PaymentSuccess 中调试代码,确认断点是否可以到 RedirectToAction 代码。 @YongqingYu 。我们使用 Paypal 中的按钮生成器功能创建了支付按钮。在按钮生成期间,我们可以指定必要的 URL,例如支付成功、取消和其他可选 URL。因此,当我们付款时,Paypal 本身会调用相应的方法。 【参考方案1】:

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

代码处理业务逻辑为exception,代码运行无法到达RedirectToAction的问题

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

【讨论】:

感谢您的回答。我已经添加了 try/catch。但它没有显示任何异常。我曾尝试在托管环境中进行调试(使用 IIS),它指向 RedirectToAction() 方法。但不重定向:(【参考方案2】:

终于,我得到了解决方案。问题是由于我们使用TempData 的方式而发生的。在将其分配给 ASP.Net Core 中的 TempData 之前,我们必须序列化 amount

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

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

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

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

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

【讨论】:

以上是关于从另一个网站导航时 RedirectToAction 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从另一个页面访问时无法访问的链接

通过php从另一个网站获取文本[关闭]

如何在使用 UIpageviewcontroller 导航页面时从另一个视图控制器自动更新视图控制器上的标签

Flutter 导航栏 - 从另一个页面更改选项卡

从另一个页面导航到锚定链接

从另一个不同的 AngularJS 组件访问表单(用于验证)