Asp.net mvc 4 ASP.NET Web API体系结构建议/反馈

Asp.net mvc 4 ASP.NET Web API体系结构建议/反馈,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,目前,我面临着构建一个web服务的需求,该服务将允许java客户机通过httprequest检索并触发对数据的操作。我们是一家.Net商店。看来最新的解决方案是Microsoft的MVC4 Web API。我已经习惯了您的标准分层体系结构,我已经从API中提取了数据,但这将是我第一个提供数据的web服务 从我的研究中,我看到了如下建议: 将逻辑和数据访问分离到单独的项目类型类库中 使用控件访问数据并执行逻辑 使用您的模型访问数据并执行逻辑 我正在寻找一位有MVC4WebAPI经验的人,他可以

目前,我面临着构建一个web服务的需求,该服务将允许java客户机通过httprequest检索并触发对数据的操作。我们是一家.Net商店。看来最新的解决方案是Microsoft的MVC4 Web API。我已经习惯了您的标准分层体系结构,我已经从API中提取了数据,但这将是我第一个提供数据的web服务

从我的研究中,我看到了如下建议:

  • 将逻辑和数据访问分离到单独的项目类型类库中
  • 使用控件访问数据并执行逻辑
  • 使用您的模型访问数据并执行逻辑
我正在寻找一位有MVC4WebAPI经验的人,他可以为以这种方式构建Web服务的良好实践提供一些启示


提前谢谢

首先,一定要将ASP.NET Web API逻辑放在一个单独的项目中。这将为您提供托管层的灵活性(因为ASP.NETWebAPI是托管不可知的),并且它只会使整个项目变得干净。假设您的项目名为MyProject。您可以将API项目命名为
MyProject.API
,并且可以将
Microsoft.AspNet.WebApi.Core
NuGet包安装到此项目中

我还建议您分离域层(POCO实体、存储库、服务层片段等)。让我们将其称为
MyProject.Domain
。然后,您可以从
MyProject.API
项目中引用这个
MyProject.Domain
项目

我不建议您将所有POCO实体转储到API中。因此,我肯定会使用数据传输对象(Dto)。您可以使用第三方工具(如autoMapper)将实体类映射到DTO。但是,一定要将DTO、请求命令和请求模型放在一个单独的项目中。您可以从
MyProject.API
project中引用
MyProject.API.Model
project。为什么我们要为此创建一个单独的项目?因为,以后如果您决定为HTTP API构建一个.NET客户机包装器,您可以很容易地引用此项目,并将其与.NET客户机一起使用。让我们调用这个项目
MyProject.API.Model

最后,我们的API需要一个宿主层。如果您希望在ASP.NET下托管此项目,您可以通过空的Web应用程序模板创建一个新项目,让我们调用此项目
MyProject.API.WebHost
。然后,您可以将
Microsoft.AspNet.WebApi
包安装到此项目中。在此项目中,您将引用
MyProject.API
MyProject.API.Model
MyProject.Domain
项目。此项目是您应该部署到服务器的项目

如果要为HTTP API创建.NET包装,可以创建另一个名为
MyProject.API.Client
的项目,并将
Microsoft.AspNet.WebApi.Client
包安装到此项目中。您还可以从这个项目中引用
MyProject.API.Model
项目,这样您就可以反序列化为强类型对象并从中序列化

以下是我一直在使用的项目的解决方案资源管理器的屏幕截图:


希望这能给你一点启发。

欢迎来到stackoverflow!我觉得这个问题有点模糊。你能解释一下你到底想做什么吗?类似于:“我的Web服务的设计应该是什么?以下是我的想法”?也许。。。这个问题似乎太开放了。谢谢你的回答和欢迎。恐怕我的问题含糊不清,与我对MVC4产品的了解相符。我在考虑两个选择。第一种选择是将我的逻辑和数据访问分离到单独的类库项目中,这样可以重用代码和更好的组织。或者,另一种选择是只使用MVC外壳,并将该模型用于我的业务逻辑和数据访问,我觉得随着项目的不断扩大,该模型可能会变得非常拥挤。ASP.NET Web API!=ASP.NET MVC仅供参考:)哇,我本来想在深夜发送MVC4 Web Api的:DIt非常感谢您的反馈。感谢您的快速回复。:-\n这听起来真的像是@DanEsparza,如果您觉得其中任何一层没有意义,请告诉我,我会告诉您原因。我知道这篇文章有点老,但我正在研究最佳实践,我正在搜索网站,最后我来到了这里。所以我的问题是,你能区分API、API客户端和API客户端web吗?我不确定。