questions net mvc examen exam developing asp applications asp.net-mvc asp.net-mvc-3 action

asp.net-mvc - net - exam 70-486



return new EmptyResult() VS return NULL (3)

Artur,

ambos hacen básicamente lo mismo, ya que el encabezado http se envía junto con una página en blanco. sin embargo, podría modificarlo aún más si lo desea y devolver un nuevo HttpStatusCodeResult () con el statusCode y la descripción de estado apropiados. es decir:

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

Creo que puede ser una alternativa útil.

[edit] - encontré una buena implementación de HttpStatusCodeResult () que ejemplifica cómo aprovechar esto con google etc. en mente:

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

en ASP.NET MVC cuando mi acción no devuelve nada, utilizo return new EmptyResult() o return null

¿Hay alguna diferencia?


Cuando devuelve null de una acción, el marco MVC (en realidad, la clase ControllerActionInvoker ) creará internamente un nuevo EmptyResult . Entonces, finalmente, se usará una instancia de la clase EmptyResult en ambos casos. Entonces no hay diferencia real.

En mi opinión personal, return new EmptyResult() es mejor porque comunica más claramente que tu acción no devuelve nada.


Puede devolver null . MVC detectará eso y devolverá un EmptyResult .

MSDN: EmptyResult representa un resultado que no hace nada, como una acción de controlador que devuelve nulo

Código fuente 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) { } }

Y la fuente de ControllerActionInvoker que muestra si devuelve nulo, MVC devolverá 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; }

Puede descargar el código fuente del Asp.Net Mvc Project en Codeplex .