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) {
}
}
また、nullを返すかどうかを示すControllerActionInvoker
からのソース、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;
}
Asp.Net MVCプロジェクトのソースコードは Codeplex でダウンロードできます。
アクションから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;
これは有用な代替手段になると思います。
[編集]-googleなどを念頭に置いてこれを活用する方法を例示するHttpStatusCodeResult()のニース実装を見つけました。