Действия контроллера ASP.Net MVC, возвращающие void - PullRequest
70 голосов
/ 12 января 2010

Если у меня есть следующее действие контроллера ...

public void DoSomething()
{
}

будет ли фреймворк преобразовывать его в это?

public EmptyResult DoSomething()
{
  return new EmptyResult();
}

Ответы [ 3 ]

78 голосов
/ 12 января 2010

Да

Контроллер, который возвращает void, выдаст EmptyResult.

Взято из

Жизнь и времена контроллера ASP.NET MVC

3 голосов
/ 12 января 2010

Похоже, проверьте исходный код файла ControllerActionInvoker.cs . Я не проверял это, но логика говорит мне, что возвращение void установит для actionReturnValue значение null, поэтому генерируется EmptyResult. Это самый последний исходный код, не проверенный источник для ASP.net MVC 1.0.

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;
}
1 голос
/ 12 января 2010

Он не будет «конвертировать» его, но оба будут иметь тот же эффект, что и пользователь. Запрос будет отправлен, но ответ не будет возвращен клиенту.

Лично я думаю, что вам нужно отправить ответ клиенту, даже если вы просто записали продолжение или успех непосредственно в поток ответов. Даже JSON true или пустой XML-документ лучше, чем ничего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...