Asp.net web api ASP.NET Web API操作路由
在就由于后端设计的限制,我们的API需要如何运行进行了长时间的讨论之后,我想了解以下可能性:Asp.net web api ASP.NET Web API操作路由,asp.net-web-api,asp.net-mvc-routing,asp.net-routing,Asp.net Web Api,Asp.net Mvc Routing,Asp.net Routing,在就由于后端设计的限制,我们的API需要如何运行进行了长时间的讨论之后,我想了解以下可能性: 1. /students/251/employment <--- allow GET, PUT, POST 2. /students/251/employment/jobs <--- allow GET only 3. /students/251/employment/jobs/435 <--- allow all verbs 4. /students/251/employment/i
1. /students/251/employment <--- allow GET, PUT, POST
2. /students/251/employment/jobs <--- allow GET only
3. /students/251/employment/jobs/435 <--- allow all verbs
4. /students/251/employment/internships <--- allow GET only
5. /students/251/employment/internships/664 <--- allow all verbs
这里是我的控制器方法的简略版本:
public ApiEmploymentGetResult Get(long id) {
// code omitted
}
[HttpGet]
public IEnumerable<ApiJob> Jobs(long id) {
// code omitted
}
[HttpGet]
public IEnumerable<ApiOwnVenture> OwnVenture(long id) {
// code omitted
}
public void Put(long id, MyModel model) {
// breaks before getting here
}
案例#1似乎相互冲突,因为框架预期的是行动而不是行动。我希望所有这些案例都能正常工作。您可能需要了解属性路由(和)
如果您的路由是'api/v1/Employment/{action}/{jobId}',那么它究竟是如何匹配'/students/251/Employment/jobs'之类的内容的呢?
public ApiEmploymentGetResult Get(long id) {
// code omitted
}
[HttpGet]
public IEnumerable<ApiJob> Jobs(long id) {
// code omitted
}
[HttpGet]
public IEnumerable<ApiOwnVenture> OwnVenture(long id) {
// code omitted
}
public void Put(long id, MyModel model) {
// breaks before getting here
}
context.Routes.MapHttpRoute(
name: "V1/EmploymentApi",
routeTemplate: "api/v1/Employment/{action}/{jobId}",
defaults: new { controller = "Employment", jobId = RouteParameter.Optional, action = "Get" }
);
public class StudentsController : ApiController
{
[HttpPut]
[Route("students/{studentId}/employment")]
public void UpdateStudentEmployment(int studentId) { ... }
[HttpPut]
[Route("students/{studentId}/employment/jobs/{jobId}")]
public void UpdateStudentEmploymentJob(int studentId, int jobId) { ... }
}