ActionResult返回类型有什么意义?

15 asp.net-mvc actionresult

返回ActionResult的操作有什么意义?

Mic*_*tum 20

返回ActionResult而不是"只做ActionResult正在做的事情"(即直接使用Response.Redirect或尝试通过Response OutputStream直接渲染View)给你一个非常好的优势:单元测试非常简单,特别是因为您通常不需要Web服务器来对MVC项目进行单元测试.

附录:作为重定向的示例:

如果你这样做

return Redirect(newUrl);
Run Code Online (Sandbox Code Playgroud)

在您的控制器中,您的单元测试现在可以

  • 验证返回值是否为"RedirectResult"类型
  • 通过在将其转换为RedirectResult后检查result.Url,查看重定向到的URL
  • 所有这些都无需启动IIS或尝试"clevery"拦截Response.Redirect调用
  • 在一天结束时,RedirectResult在其ExecuteResult函数中调用Response.Redirect,但您的Controller Unit Test位于其前面

附录2:当我在上面时,这是一个自定义ActionResult的示例:

http://www.stum.de/2008/10/22/permanentredirectresult/

这只是为了表明他们不是"黑魔法".它们实际上非常简单:您的Controller返回一个Action Result,MVC Runtime最终会调用它上面的ExecuteResult函数,传入一个ActionContext可以与之交互的ControllerContext.重点是将MVC的各个部分分开,使代码可重用,并使单元测试更容易,或简而言之:给出一个非常干净的框架.


tva*_*son 1

ActionResult 是许多不同类型的控制器结果的基类。通过返回基类,控制器操作可以根据方法的结果返回不同类型的结果 - ViewResult、RedirectToActionResult 等。ActionResult 包含 View 或作为以下结果的新 Action 所需的所有数据当前控制器的动作。