返回void的ASP.Net MVC控制器操作


71

如果我有以下控制器动作...

public void DoSomething()
{
}

框架会实际将其转换为此吗?

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

Answers:



3

似乎如此,请检查ControllerActionInvoker.cs源代码。我尚未验证它,但是逻辑告诉我,无效返回将把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

它不会“转换”它,但是就用户而言,两者将具有相同的效果。将发送一个请求,但是没有响应返回给客户端。

就我个人而言,我认为您需要将一些响应发送回客户端,即使您只是直接将继续或成功消息写入响应流中也是如此。甚至JSONtrue或空XML文档总比没有好。


1
为什么在这里投票?以理性的名义反驳;关于总是退货的非常好一点。
ProfK 2012年

9
我怀疑投票否决(我没有)的原因是因为回复“确实”回来了。200 OK响应。不过,响应主体为空。我认为对于ajax操作,使用HTTP状态代码来传达操作结果是合理的。200 OK(正常),500 Error(错误),403禁止(禁止)等。不一定总是需要主体。
MarkPflug 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.