定义HttpGet(Students / {SubjectId})与HttpGet(Students / {SectionId})的路由

DJ

我在控制器中有两个操作可返回学生列表:

  • HttpGet(Students/{SubjectId}) -返回一个学科的学生
  • HttpGet(Students/{SectionId}) -返回部分学生。

当我呼叫时Students/{SectionId},已接入电话Students/{SubjectId}看来我缺少有关如何解决请求的基本概念。

我的API应该如何处理此调用?我不想在路由路径中添加额外的参数。

strickt01

如果SubjectIdSectionId是相同类型(例如整数),则在Web API中,您不应公开具有相同签名的多个方法。即GET Students / {int}。Web API无法将诸如GET Students / 1234之类的调用路由到一个或其他控制器方法,因为它们的路由都与请求的URL匹配。

即使它们的类型不同或字符串的格式如此,您可以实现复杂的路由逻辑以确保调用所需的方法,但我仍然相信您应该重新考虑您的端点,因为所描述的API不是RESTful的。

REST方法应基于实体。因此,实体Students通常在其根部将有一个GET,该GET将返回所有内容,Students即:

GET Students

要获得一个学生,您需要公开采用唯一学生ID的端点。

GET Students/{StudentId}

但是,如果您想返回过滤的学生列表,SubjectId或者SectionId通常会通过查询字符串来完成。

GET Students?Section=SectionId
GET Students?Subject=SubjectId
GET Students?Section=SectionId&Subject=SubjectId

或者,如果您将学生视为该科目/科目的逻辑孩子,则可以公开以下内容:

GET Sections/{SectionId}/Students
GET Subjects/{SubjectId}/Students

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章