return new EmptyResult () VS retourne NULL

dans ASP.NET MVC lorsque mon action ne renverra rien que j’utilise return new EmptyResult() ou return null

Y a-t-il une différence?

Vous pouvez retourner null . MVC le détectera et retournera un résultat EmptyResult .

MSDN: EmptyResult représente un résultat qui ne fait rien, comme une action de contrôleur renvoyant null

Code source de 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) { } } 

Et la source de ControllerActionInvoker qui indique si vous retournez null, MVC renverra 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.ToSsortingng(actionReturnValue, CultureInfo.InvariantCulture) }; return actionResult; } 

Vous pouvez télécharger le code source du projet Asp.Net Mvc sur Codeplex .

Lorsque vous retournez null partir d’une action, le framework MVC (en fait la classe ControllerActionInvoker ) créera en interne un nouveau EmptyResult . Donc, une instance de la classe EmptyResult sera utilisée dans les deux cas. Donc, il n’y a pas de vraie différence.

Dans mon opinion personnelle, return new EmptyResult() car il communique plus clairement que ton action ne retourne rien.

Artur,

les deux font essentiellement la même chose en ce que l’en-tête http est renvoyé avec une page vierge. vous pouvez cependant le modifier si vous le souhaitez et renvoyer un nouveau HttpStatusCodeResult () avec le statusCode et le statusDescription appropriés. c’est à dire:

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

Je pense que cela peut être une alternative utile.

[edit] – a trouvé une belle implémentation de HttpStatusCodeResult () qui illustre comment utiliser ceci avec Google etc.

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