返回新的EmptyResult()VS返回NULL

在ASP.NET MVC中,当我的动作不会返回任何东西我使用return new EmptyResult()return null

有什么区别?

你可以返回null 。 MVC将检测到并返回一个EmptyResult

MSDN: EmptyResult表示一个不做任何事情的结果,就像一个控制器操作返回null

mvc的源代码。

 public class EmptyResult : ActionResult { private static readonly EmptyResult _singleton = new EmptyResult(); internal static EmptyResult Instance { get { return _singleton; } } public override void ExecuteResult(ControllerContext context) { } } 

ControllerActionInvoker的源代码显示如果你返回null,MVC将返回EmptyResult

 protected virtual ActionResult CreateActionResult(ControllerContext controllerContext, ActionDescriptor actionDescriptor, object actionReturnValue) { if (actionReturnValue == null) { return new EmptyResult(); } ActionResult actionResult = (actionReturnValue as ActionResult) ?? new ContentResult { Content = Convert.ToString(actionReturnValue, CultureInfo.InvariantCulture) }; return actionResult; } 

您可以在Codeplex上下载Asp.Net Mvc项目的源代码。

当你从一个动作返回null ,MVC框架(实际上是ControllerActionInvoker类)将在内部创build一个新的EmptyResult 。 所以最后在这两种情况下都会使用EmptyResult类的一个实例。 所以没有真正的区别。

我个人认为return new EmptyResult()更好,因为它更清楚地表明你的行为没有任何返回。

阿图尔,

两者的基本相同的地方在于,http头部与空白页面一起返回。 你可以调整,如果你希望进一步调整并返回一个新的HttpStatusCodeResult()与适当的statusCode和statusDescription。 即:

 var result = new HttpStatusCodeResult(999, "this didn't work as planned"); return result; 

我认为这可能是一个有用的select。

– find了一个很好的实现HttpStatusCodeResult()的例子,说明如何利用谷歌等这个记住:

http://weblogs.asp.net/gunnarpeipman/archive/2010/07/28/asp-net-mvc-3-using-httpstatuscoderesult.aspx