我是EF4的MVC WebAPI新手。我想知道是否最好将具有多个GET和/或PUT方法的大型控制器拆分为多个控制器,以避免“发现与请求匹配的多个操作”错误。我更喜欢仅使用基于VERB的路由模式“api / controller / id”,如下所示。
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
"Api",
"api/{controller}/{id}",
new { id = RouteParameter.Optional }
);
例如,我有两个域对象,Doctor和Patient。 ClinicController具有以下操作:
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,以便每个控制器只处理一个域对象。由于Patient Cohort是一个关联类,getPatientCohort(int doctorId)应该是PatientController还是DoctorController的方法?感谢。
答案 0 :(得分:0)
在我看来(我明确说明了这一点),你应该为每个模型创建单独的控制器。这实际上取决于行动本身的目的,但我可能会猜测出意图并大致将其分开。
Put和Create方法应该驻留在他们自己的控制器中,因为这(我再次假设)与Clinic无关。患者和医生刚刚被创建或更新(替换),这在他们自己的控制器中完全没问题。如果将患者或医生分配到诊所,则诊所控制器内部应该采取单独的措施来执行此操作。
任何以Patient模型为基础并检索相关模型的动作也应该驻留在PatientController中;类似于博士模型。
所以从本质上讲,归结为:
这类似于OData框架处理动作和关联的方式,因此我更习惯于以这种方式实现它。希望这能为您解决一些问题(或者至少提供一些指导原则)。