从另一个网站导航时,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()
方法上检索了支付金额。
我正在开发一个集成了 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()
方法上检索了支付金额。