в ASP.NET MVC, когда мое действие не вернет ничего, я использую return new EmptyResult()
или return null
есть ли разница?
в ASP.NET MVC, когда мое действие не вернет ничего, я использую return new EmptyResult()
или return null
есть ли разница?
Вы можете вернуть null
. MVC обнаружит это и вернет a EmptyResult
.
MSDN: EmptyResult представляет результат, который ничего не делает, как действие контроллера, возвращающее нуль
public class EmptyResult : ActionResult {
private static readonly EmptyResult _singleton = new EmptyResult();
internal static EmptyResult Instance {
get {
return _singleton;
}
}
public override void ExecuteResult(ControllerContext context) {
}
}
И источник из ControllerActionInvoker
, который показывает, вернули ли вы null,
MVC вернет 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;
}
Вы можете загрузить исходный код проекта Asp.Net Mvc на Codeplex.
Когда вы возвращаете null
из действия, MVC framework (фактически класс ControllerActionInvoker
) будет внутренне создавать новый EmptyResult
. Таким образом, в обоих случаях будет использоваться экземпляр класса EmptyResult
. Поэтому нет никакой реальной разницы.
По моему личному мнению return new EmptyResult()
лучше, потому что он более четко сообщает, что ваше действие ничего не возвращает.
Артур,
оба делают в основном то же самое, что заголовок http отправляется вместе с пустой страницей. вы можете, тем не менее, настроить это, если хотите, и вернуть новый HttpStatusCodeResult() с соответствующим кодом состояния и статусом. то есть:.
var result = new HttpStatusCodeResult(999, "this didn't work as planned");
return result;
Я думаю, что это может быть полезной альтернативой.
[edit] - нашел хорошую реализацию HttpStatusCodeResult(), которая иллюстрирует, как использовать это с помощью Google и т.д.: