MVC控制器中的操作方法,而不是WEBAPI,是否只返回ActionResult?

时间:2016-10-19 23:09:53

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

控制器操作方法的返回类型有哪些最佳实践?

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

e.g。

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

结束

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

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

2 个答案:

答案 0 :(得分:2)

在你的场景中,它们两者基本相同 - 都返回一个数字。

但是,值得注意的是,响应标头中的 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

答案 1 :(得分:0)

以下摘录摘自本文档。

Controllers, Actions, and Action Results

现在,虽然文档的目标是dot net core,但原则是可转移的

  

操作可以返回任何内容,但经常会返回一个实例   产生的IActionResult(或Task<IActionResult>用于异步方法)   一个回应。动作方法负责选择什么样的   响应;行动结果做出了回应。

     

...

     

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

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

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