c# - ASP.NET Web API 获取子列表(分层资源)

标签 c# asp.net rest asp.net-web-api asp.net-mvc-routing

我想使用 ASP.NET Web Api 实现以下剩余模式:

http://mydomain/api/students
http://mydomain/api/students/s123
http://mydomain/api/students/s123/classes
http://mydomain/api/students/s123/classes/c456

我已经使用 ApiController 和以下两种方法使前两个链接正常工作:

public class StudentsController : ApiController {
  // GET api/students
  public IEnumerable<Student> GetStudents() {  
  }

  // GET api/students/5
  public IEnumerable<Student> GetStudent(string id) {  
  }
}

在同一个 Controller 中(或者我需要一个名为 ClassesController 的不同 Controller ?),我将如何实现最后两个链接?另外,“类”部分的路由是什么样的(如果需要)?

这是我的 WebApiConfig(如果可能的话,我想保持动态,而不是硬编码到/classes 的路由:

config.Routes.MapHttpRoute(
  name: "DefaultApi",
  routeTemplate: "api/{controller}/{id}",
  defaults: new { id = RouteParameter.Optional }
);   

// EDIT - I'm getting 404's when trying to use this
context.Routes.MapHttpRoute(
  name: "JobsApi",
  routeTemplate: this.AreaName + "/Students/{id}/Classes/{classId}",
  defaults: new { classId = RouteParameter.Optional }
);   

编辑 这是我新创建的 ClassesController:

public class ClassesController : ApiController {
  // GET api/classes
  public IEnumerable<TheClass> Get(string id) {    
      return null;
  }
}

尝试转到此 URL 时出现 404 错误:

http://mydomain/api/students/s123/classes

最佳答案

ASP.NET 中的路由可以表达这些更复杂的规则,但需要明确设置。例如,在这种情况下,您必须定义 2 条路线:

config.Routes.MapHttpRoute(
  name: "DefaultApi",
  routeTemplate: "api/{controller}/{id}",
  defaults: new { id = RouteParameter.Optional }
);   

config.Routes.MapHttpRoute(
  name: "DefaultApi",
  routeTemplate: "api/students/{studentId}/{controller}/{classId}",
  defaults: new { classId = RouteParameter.Optional }
);   

你会有一个 Controller :

public class ClassesController
{
   public TheClass Get(int studentId, int classId)
   {
       ....
   }
}

这也许不是理想的选择,但却是主要的选择。

我正在研究分层路由,由于 Web API 中的实现问题,这是不可能的,但这个问题现在已经解决,所以我可能会再次开始研究它。

关于c# - ASP.NET Web API 获取子列表(分层资源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674255/

相关文章:

c# - 如何在 asp.net 中显示 response.write

java - REST 服务在请求 1 分钟后没有响应

c# - AddDays 在 MVC4 中不起作用?

C# 将每个单选按钮选定的数据保存到数据库

asp.net - F11 键( Debug模式)在 Visual Studio 2010 中不起作用?

.net - 引用system.web.cors

java - 一种开发多版本java spring Rest api的方法\设计

c# - 体验C#大酒杯代码中的错误消息

c# - ASP.NET MVC 渲染似乎很慢

c# - 上一个按钮显示验证