我有一个以下的操作:
[HttpGet]
public IActionResult SendEmailVerificationCode(int userId)
{
SpaceUser user = userManager.FindByIdAsync(userId).Result;
bool taskComleted = SendEmailVerificationLink(userId).IsCompleted;
if (taskComleted)
{
AddToErrorData(InfoMessages.EmailVerificationLinkSent_Params, user.Email);
return RedirectToAction(nameof(HomeController.Index), "Home");
}
else
{
return RedirectToAction("EmailNotConfirmed", new { userId = user.Id });
}
}
当我调试代码跳入else块时,它将重定向到同一控制器中的
EmailNotConfirmed
操作。但它没有重定向到HomeController
的Index
操作,而是停留在Account/SendEmailVerificationCode
并显示一个空白页面。
HomeController.Index
如下:[HttpGet]
public IActionResult Index()
{
return View();
}
我尝试了以下方法:
- 起初,
SendEmailVerificationCode
动作是异步的,但HomeController.Index
不是。因此,我将它们都声明为异步。 - 然后我从它们两个中删除了
async
的声明。 - 我试过使用
return RedirectToAction("Index", "Home");
。 SendEmailVerificationCode
带有HttpPost
属性;我将其改为HttpGet
。
如何将重定向到不同控制器中的动作?
任何帮助都将不胜感激。
P.S.:我已经对这个问题进行了一段时间的研究,并阅读了类似于以下问题的解决方案:
MVC RedirectToAction is not working properly
RedirectToAction gets ignored
但是这些或关于在ajax请求后未重定向动作的问题的问题都没有帮助我。
谢谢。
Startup.cs
中添加新的路由,如下所示:routes.MapRoute("MainIndex", "{controller}/{action}", new { controller = "Home", action = "Index" });
并通过以下方式进行重定向:return RedirectToRoute("MainIndex");
但是它没有起作用。 - Chakian