AspNetCore MVC - 返回RedirectToAction被忽略了

时间:2016-12-24 14:22:44

标签: c# asp.net-core-mvc

我的行动如下:

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请求之后没有重定向的操作的问题都没有帮助我。

感谢。

1 个答案:

答案 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());