【问题标题】:Should action methods in an MVC controller, not a WEBAPI, return ActionResult only?MVC 控制器而不是 WEBAPI 中的操作方法应该只返回 ActionResult 吗?
【发布时间】:2016-10-20 07:54:02
【问题描述】:

就控制器的操作方法的返回类型而言,最佳实践是什么?

我有一个保存数据并返回生成的 ID 的操作方法。在 int 上返回 ActionResult 有什么区别和好处?

例如

public ActionResult SaveValue(Payment model) {
     // Save stuff
     return this.Json(id);
}

超过

public int SaveValue(Payment model) {
     // Save stuff
     return id;
}

如果我要返回一个对象,比如 Payment 模型,我会将它作为 json 返回,并让 Json() 方法正确转换它。但是,对于简单的值,返回类型本身而不是 ActionResult 是否正确?

【问题讨论】:

  • 你可以返回。

标签: c# .net asp.net-mvc


【解决方案1】:

在您的场景中,它们本质上是相同的 - 都返回一个数字。

但是,值得注意的是,响应标头中的 Content-Type 是不同的。

(Json)

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcRGV2ZWxvcG1lbnRBcmNoaXZlXERlbW9NdmNcRGVtb012Y1xIb21lXFNhdmVWYWx1ZQ==?=
X-Powered-By: ASP.NET
Date: Wed, 19 Oct 2016 23:51:29 GMT
Content-Length: 1

稍后 (int)

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/10.0
X-AspNetMvc-Version: 5.2
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?RDpcRGV2ZWxvcG1lbnRBcmNoaXZlXERlbW9NdmNcRGVtb012Y1xIb21lXFNhdmVWYWx1ZTI=?=
X-Powered-By: ASP.NET
Date: Wed, 19 Oct 2016 23:51:51 GMT
Content-Length: 1

【讨论】:

    【解决方案2】:

    以下摘录来自本文档。

    Controllers, Actions, and Action Results

    现在,虽然文档是针对 dot net core 的,但原则是可以转移的

    动作可以返回任何东西,但通常会返回一个实例 IActionResult(或 Task<IActionResult> 用于异步方法)产生 一个答复。动作方法负责选择什么样的 回复;动作结果做响应。

    ...

    除了上面的方法,一个动作也可以简单地返回一个对象。在这种情况下,对象将根据客户端的请求进行格式化。

    在这种情况下,框架应该根据请求处理结果并不重要。

    通常的做法是将返回类型作为抽象ActionResult。如果愿意,您也可以轻松返回具体实现。

    【讨论】:

      猜你喜欢
      • 2010-11-04
      • 2010-09-13
      • 1970-01-01
      • 2010-10-11
      • 1970-01-01
      • 2020-01-12
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多