gpt4 book ai didi

c# - 手动将 RedirectToRouteResult 解析为 View 结果

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:02 25 4
gpt4 key购买 nike

对于我正在从事的项目,我正在 SpecFlow 1.9.2 中实现一些功能测试。

我在这些测试中遇到的问题是,我在尝试将 ActionResult 转换为 ViewResult 时遇到空引用异常。然而,这个问题存在的原因是因为在我们的 Controller 中,我们有两个代码路径,如下所示:

public class CurrentController : Controller
{
[HttpPost]
public ActionResult SomeAction(MyModel model)
{
if(ModelState.IsValid)
{
model.Save();
return RedirectToAction("SomeOtherAction", "Current");
}

// Views will be omitted as they're irrelevant to my question.
return View(model);
}

[HttpGet]
public ActionResult SomeOtherAction()
{
SomeModel model = new SomeModel();
return View(model);
}
}

...在我的功能测试中,我有一个调用 HTTP post 的步骤:

public class MyFeatureTest
{
private ActionResult _actionResult;
private ViewResult _viewResult;

private MyModel _myModel;
private SomeModel _someModel;

// SNIP: Other steps unnecessary to this problem description...

[When(@"I click save on the first action")]
public void WhenIClickSaveOnTheFirstAction()
{
_actionResult = _currentController.SomeAction(_myModel);
_viewResult = _actionResult as ViewResult; // Evaluates to null
_someModel = _viewResult.ViewData.Model as SomeModel;
}
}

尝试分配 _someModel 时,会抛出 NullReference 异常。

为了尝试规避这个问题,我尝试将 HTTP post 中的 RedirectToAction 调用更改为对 SomeOtherAction 的直接调用,但这导致了站点错误。

问题:如上所述,我的问题的核心是 RedirectToRouteResult 不是 ViewResult。在功能测试的上下文中,我可以通过哪些方法解析 RedirectToRouteResult 以使 Controller 生成适当的 ViewResult?

最佳答案

默认ModelState.IsValid会返回true,这会导致RedirectToRouteResult而不是继续返回ViewResult。

您可以尝试调用 _currentController.ModelState.AddModelError() 来强制 ModelState.IsValid 返回 false。

关于c# - 手动将 RedirectToRouteResult 解析为 View 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19141469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com