如何最好地重载RESTful服务方法?

时间:2016-05-12 21:11:42

标签: rest asp.net-web-api

我有一个使用ASP.NET MVC模板构建的RESTful Web API。它工作得很好。我不确定如何优雅地安排两个参数冲突的方法。我有一个Certifications表,列出了我的Microsoft认证。我有一个考试表,列出了每个认证的考试。有一对多的关系。当我创建ExamsController时,它自动添加了一个GetExams()方法和一个GetExam(int id)方法。 GetExams方法返回所有Exams记录,GetExam方法返回与id匹配的Exam记录。到现在为止还挺好。我想添加一个GetExams(int certificationId)方法来返回与指定认证相关的所有考试。那是火车离开赛道的时候。它引发了一个错误,即存在对我没有意义的冲突方法,因为一个名为GetExam,带有int参数,另一个名为GetExams,带有int参数。 (我认为微软在未来的Web API版本中有一些设计问题需要改进)。所以我重写了第二个方法是GetExams(int id,int extra),我忽略了额外的int参数。它有效,但它并不优雅,我是一个优雅的人。组织这三种方法的最佳REST方式是什么?

1 个答案:

答案 0 :(得分:4)

修复您的网址并使用属性路由

[HttpGet]
[Route("api/exams/{id}")]
public IHttpActionResult GetExams(int id) { }

[HttpGet]
[Route("api/certifications/{cid}/exams")]
public IHttpActionResult GetCertificationExams(int cid) { }