Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api ASP.NET Web API操作路由_Asp.net Web Api_Asp.net Mvc Routing_Asp.net Routing - Fatal编程技术网

Asp.net web api ASP.NET Web 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

在就由于后端设计的限制,我们的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/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) { ... }
}