【问题标题】:Why use ASP.NET MVC 2 for REST services? Why not WCF?为什么将 ASP.NET MVC 2 用于 REST 服务?为什么不是 WCF?
【发布时间】:2010-03-27 20:48:39
【问题描述】:
所以我看到 MVC 2 现在支持 [HttpPut] 和 [HttpDelete] 以及 [HttpGet] 和 [HttpPost],从而可以使用它来执行完整的 RESTful Web 服务。
我已经使用 WCF 的 REST 工具包有一段时间了,发现它相当强大,但我很想知道使用 MVC 2 方法有哪些(如果有的话)优势。
欢迎提供链接、战争故事,甚至纯粹的传闻。
【问题讨论】:
标签:
wcf
rest
asp.net-mvc-2
【解决方案1】:
我很确定 ASP.NET MVC 从一开始就支持所有 HTTP 动词。至少HttpVerb Enumeration 从一开始就拥有它们。 V2 中唯一的新特性是它们是属性。
// V1
[AcceptVerbs( HttpVerbs.Delete )]
// V2
[HttpDelete]
六个一个,六个另一个。至于您是想通过 WCF 还是 ASP.NET MVC 公开功能,这取决于您对应用程序的看法。
如果您将其视为一个胖客户端应用程序,它恰好是用 JavaScript 编写的,并为 data 调用 restful 服务(然后在客户端对其进行格式化),那么 WCF 会觉得像一个更正确的解决方案(即使你可以使用任何一个)。
但是,如果您将应用程序视为以某种形式返回 content 以供消费的服务器应用程序,那么使用 RESTful API 来执行操作会更有意义。您的操作将返回完全格式化的内容,这些内容将显示在浏览器中,无需进一步处理。您可以从 Web 服务返回格式化的内容(HTML 或其他),但这会让人感觉有些不对。
至少这种区别在我看来是有意义的 =)。您可能还对 Phil Haack 在How a Method Becomes an Action 上的帖子感兴趣。
现在有另一种选择,Web API。 ScottGu 在他的博客中有一个简短的介绍,还有一篇有趣的博客文章讨论了使用 Web API 与控制器创建 API 与 here。
【解决方案3】:
我不能谈论 MVC 工具包,但我个人觉得使用 WCF 很痛苦。它确实有用途,但它是一个相当沉重的框架,有时使用起来很尴尬。
如果您想走 REST 路线,OpenRasta 是目前最好的 .Net 解决方案。尤其是在合规性方面。
您也可以将 ASP MVC 框架打造为 RESTful,但这需要相当多的工作(与开箱即用的 OpenRasta 相比)。
【解决方案4】:
我们使用 ASP.Net MVC 1.0 创建 JSON 服务。
这有几个原因:
- 我们将 ASP.Net MVC 用于页面,因此将其用于服务也减少了项目中的技术数量。
-
我们发现它非常容易用于返回带有 JSON 格式数据的 ActionResult
public ActionResult GetData(string id)
{
if (string.IsNullOrEmpty(id))
{
throw new ArgumentNullException("id", "Searchvalue must be provided.");
}
// Where Provider.GetData returns IEnumerable<Data>
return Json(Provider.GetData(id));
}