我的行动如下:
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { DashboardComponent } from './dashboard.component';
import { CrisisListComponent } from './crisis/crisis-list.component';
import { PageNotFoundComponent } from './not-found.component';
const routes: Routes = [
{ path: 'dashboard', component: DashboardComponent },
{ path: 'crisis-center', component: CrisisListComponent },
{ path: '', redirectTo: '/heroes', pathMatch: 'full' },
{ path: '**', component: PageNotFoundComponent }
];
@NgModule({
imports: [ RouterModule.forRoot(routes) ],
exports: [ RouterModule ]
})
当我将代码跳转到else块(调试时)时,它会重定向到[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 });
}
}
动作,该动作位于同一个控制器中。但它不会重定向到EmailNotConfirmed
的{{1}}操作。相反,浏览器会停留在HomeController
并显示空白页。
Index
如下:
Account/SendEmailVerificationCode
我试过这些:
HomeController.Index
操作是异步,但[HttpGet]
public IActionResult Index()
{
return View();
}
没有。所以我把它们都声明为异步。SendEmailVerificationCode
声明。HomeController.Index
。async
具有return RedirectToAction("Index", "Home");
属性;我将其更改为SendEmailVerificationCode
。如何在不同的控制器中重定向到某个动作? 任何帮助将不胜感激。
P.S。:我一直在研究这个问题,我已经阅读了以下问题的解决方案:
MVC RedirectToAction is not working properly
RedirectToAction gets ignored
但是这些或者关于在ajax请求之后没有重定向的操作的问题都没有帮助我。
感谢。
答案 0 :(得分:6)
我通过在应用程序中添加一些日志记录来解决问题。事实证明,实际问题正在被隐藏。
我使用TempData来存储自定义的错误消息,我通过问题中显示的AddToErrorData
函数使用它。
在AspNetCore中,Serializable
属性与ISerializable
接口一起消失。因此,TempData无法序列化我的自定义IList
对象列表。
当我将TempData[ConstantParameters.ErrorData] = _errorData;
更改为TempData[ConstantParameters.ErrorData] = JsonConvert.SerializeObject(_errorData);
时,重定向问题已解决。
供参考:我还必须将TempData检索行更改为:_errorData = JsonConvert.DeserializeObject<ErrorDataList>(TempData[ConstantParameters.ErrorData].ToString());