【发布时间】:2014-05-29 17:11:15
【问题描述】:
场景
网站:ASP.Net MVC 5 管理模型、控制器和视图。
Api:RESTful Web api 管理模型、控制器和返回 JSON
问题: BL 中的代码重复。我们总是在两个地方重做相同的逻辑。
我想到的方法:
- 将 BL 从网站 MVC 中取出,并仅将其保留在 Web Api 中的单独 VS 解决方案中
- 网站现在是 Web Api 的消费者
-
关于内容协商,我认为有两种选择:
Web Api“知道”返回哪种格式(ViewResult、JSON 或 XML)并根据请求者(网站、移动应用程序等)在 BL 中序列化/反序列化。我看到的优势是继续服用 强类型模型在网站中呈现视图的优势
Web Api 总是返回 JSON 并且消费者应用程序在客户端处理结果
问题:
- 这种方法是一种好的做法吗?
- 哪个更好:Web Api 始终返回 JSON,还是“知道”要返回哪种格式的智能 Web Api?
【问题讨论】:
-
网站应该处理 API 提供的内容 - 不要让 api 根据请求者发送不同的响应
-
为什么 Web 应用程序要使用 Web 服务?它们不是在相同的上下文中运行吗?如果它们确实需要成为单独的应用程序,那么要么创建额外的服务供 Web 应用程序使用,要么让它使用已经存在的服务。
-
David,它们已经是两个不同的应用程序了。该网站具有返回 Viewresult 的控制器,并且渲染视图很好,因为它是强类型的。另一个应用程序是实现 RESTfull CRUD 操作(与网站中的控制器相同)的 Web Api,仅返回 JSON。所以我想重用 Web Api 但协商返回内容。
-
斯科特,为什么不呢?我希望从网站调用的请求返回 ViewResult,而从任何其他应用程序调用的请求返回 JSON/XML。我不希望在控制器和 Web Api 中编写相同的业务逻辑。
-
提示:使用新的 Web API 控制器,您可以使用“ACCEPT”标头控制返回的格式。 [Accept = application/json] = JSON, [Accept = application/xml] = XML, [Accept = text\html] = HTML 等...这样调用者“知道自己想要什么”,而 Web API 只是提供服务满足要求。
标签: asp.net asp.net-mvc json asp.net-web-api2