Dans ASP.NET MVC, lorsque mon action ne renvoie rien, j'utilise return new EmptyResult()
ou return null
Y a-t-il une différence ?
Dans ASP.NET MVC, lorsque mon action ne renvoie rien, j'utilise return new EmptyResult()
ou return null
Y a-t-il une différence ?
Vous pouvez retourner null
. MVC détectera cela et renverra un EmptyResult
.
MSDN : EmptyResult représente un résultat qui ne fait rien, comme une action de contrôleur retournant 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) {
}
}
Et la source de ControllerActionInvoker
qui montre si vous retournez null, MVC retournera 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;
}
Vous pouvez télécharger le code source du projet Asp.Net MVC à l'adresse suivante Codeplex .
Quand vous revenez null
à partir d'une action, le cadre MVC (en fait, l'application ControllerActionInvoker
) créera en interne une nouvelle classe EmptyResult
. Ainsi, finalement, une instance de la EmptyResult
sera utilisée dans les deux cas. Il n'y a donc pas de réelle différence.
Selon mon opinion personnelle return new EmptyResult()
est meilleur car il communique plus clairement que votre action ne retourne rien.
Arthur,
Les deux font fondamentalement la même chose, à savoir que l'en-tête http est renvoyé avec une page blanche. Vous pourriez cependant modifier cette fonction si vous le souhaitez et renvoyer un nouveau HttpStatusCodeResult() avec le statusCode et le statusDescription appropriés :
var result = new HttpStatusCodeResult(999, "this didn't work as planned");
return result;
Je pense que cela peut être une alternative utile.
[modifier] - J'ai trouvé une belle implémentation de HttpStatusCodeResult() qui illustre comment tirer parti de cette fonction avec google, etc :
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.