C# 从其他网站导航时,RedirectToAction不起作用
我正在从事一个asp.net核心MVC项目与PayPal集成。完成支付后,PayPal将正确重定向到成功URL(…/PayPal/PaymentSuccess)。请参阅下面给出的方法: PayPalControllerC# 从其他网站导航时,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
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。因此,当我们进行支付时,贝宝本身会调用相应的方法。