从另一个网站导航时 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 不起作用的主要内容,如果未能解决你的问题,请参考以下文章