在ASP.NET MVC中,当我的动作不会返回任何内容时,我使用return new EmptyResult()
或return null
有什么不同吗?
你可以返回null
。 MVC将检测到并返回EmptyResult
。
MSDN:EmptyResult表示不执行任何操作的结果,例如返回null的控制器操作
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
类)将在内部创建一个新的EmptyResult
。因此,最终将在两种情况下使用EmptyResult
类的实例。所以没有真正的区别。
在我个人看来,return new EmptyResult()
更好,因为它更清楚地表明你的行为没有返回任何东西。
亚瑟,
两者基本相同,因为http标头与空白页一起发回。但是,如果您愿意,可以进一步调整并返回具有相应statusCode和statusDescription的新HttpStatusCodeResult()。即:
var result = new HttpStatusCodeResult(999, "this didn't work as planned");
return result;
我认为这可能是一个有用的选择。
[编辑] - 找到了一个很好的HttpStatusCodeResult()实现,它体现了如何在谷歌等中充分利用它: