返回ActionResult的操作有什么意义?
返回ActionResult而不是"只做ActionResult正在做的事情"(即直接使用Response.Redirect或尝试通过Response OutputStream直接渲染View)给你一个非常好的优势:单元测试非常简单,特别是因为您通常不需要Web服务器来对MVC项目进行单元测试.
附录:作为重定向的示例:
如果你这样做
return Redirect(newUrl);
在您的控制器中,您的单元测试现在可以
验证返回值是否为"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的各个部分分开,使代码可重用,并使单元测试更容易,或简而言之:给出一个非常干净的框架.