Asp.net web api asp.net webapi控制器的设计考虑

Asp.net web api asp.net webapi控制器的设计考虑,asp.net-web-api,Asp.net Web Api,我不熟悉使用EF4的MVC WebAPI。我想知道是否最好将具有多个GET和/或PUT方法的大型控制器拆分为多个控制器,以避免“发现多个与请求匹配的操作”错误。我更喜欢只使用基于动词的路由模式“api/controller/id”,如下所示 GlobalConfiguration.Configuration.Routes.MapHttpRoute( "Api", "api/{controller}/{id}", new { id = RouteParameter.Optional } ); 例

我不熟悉使用EF4的MVC WebAPI。我想知道是否最好将具有多个GET和/或PUT方法的大型控制器拆分为多个控制器,以避免“发现多个与请求匹配的操作”错误。我更喜欢只使用基于动词的路由模式“api/controller/id”,如下所示

GlobalConfiguration.Configuration.Routes.MapHttpRoute(
"Api",
"api/{controller}/{id}",
new { id = RouteParameter.Optional }
);
例如,我有两个域对象,医生和病人。控制器具有以下操作:

getDoctors()
getPatientCohort(int doctorId) 
getPatientPrimaryDr(int patientId) 
getPatientDoctors(int patientId, int clinicId)
getPatients()
getPatient(int patientId)
putDoctor(Doctor doctor)
putPatient(Patient patient)
createDoctor(Doctor doctor)
createPatient(Patient patient)
我是否应该将此控制器拆分为DoctorController和PatientController,以便每个控制器只处理一个域对象。由于患者队列是一个关联类,GetPatientShort(int-doctorId)是PatientController还是DoctorController的方法?谢谢。

在我看来(我明确指出这一点),您应该为每个模型创建单独的控制器。这真的取决于行动本身的目的,但我可能可以猜测其意图,并大致将其分解

Put和Create方法应该驻留在它们自己的控制器中,因为这(同样,我假设)与诊所无关。患者和医生只是被创建或更新(替换),这在他们自己的控制器中是完美的。如果患者或医生被分配到诊所,诊所控制器内部应该有一个单独的操作来执行此操作

以患者模型为基础并检索相关模型的任何操作也应驻留在PatientController中;类似于医生模型

所以本质上可以归结为:

  • 任何特定于模型的操作都应该在该模型的控制器中
  • 检索关联模型的任何特定于模型的操作都应该驻留在主模型的控制器中
  • 任何绑定操作都可以驻留在将两者绑定在一起的任一控制器中
这类似于OData框架处理动作和关联的方式,因此我更习惯于以这种方式实现它。希望这能为你澄清一些事情(或者至少提供一些指导方针)