dans ASP.NET MVC lorsque mon action ne retournera rien que j'utilise return new EmptyResult()
ou return null
y a-t-il une différence?
Vous pouvez renvoyer null
. MVC le détectera 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 que 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 sur Codeplex .
Lorsque vous retournez null
d'une action, le framework MVC (en fait la classe ControllerActionInvoker
) crée en interne un nouveau EmptyResult
. Donc finalement une instance de la classe EmptyResult
sera utilisée dans les deux cas. Il n'y a donc pas de réelle différence.
À mon avis, return new EmptyResult()
est mieux car il communique plus clairement que votre action ne renvoie rien.
Artur,
les deux font essentiellement la même chose dans la mesure où l'en-tête http est renvoyé avec une page vierge. vous pouvez cependant l'ajuster davantage 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 tirer parti de cela avec google etc à l'esprit: