63 votes

return new EmptyResult() VS return NULL

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 ?

80voto

dknaack Points 26873

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

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 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 .

15voto

nemesv Points 71516

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.

8voto

jim tollan Points 12995

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 :

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

Prograide.com

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.

Powered by:

X