После продолжительного обсуждения с точки зрения того, как наш API необходимо будет вести себя из-за ограничения конструкции серверной, я хотел бы иметь следующие возможности:ASP.NET Web 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
Этих случаи работают для запросов GET. Я изо всех сил, когда я пытаюсь сделать запрос PUT на случай # 1 и # 3:
Case #1 Error
No HTTP resource was found that matches the request URI '/students/251/employment/221'.,
No action was found on the controller 'Employment' that matches the name '221'.
Case #3 Error
The requested resource does not support http method 'PUT'.
Вот сокращенная версия моих методов контроллера:
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
}
Моя маршрутизация выглядит следующим образом , но я не уверен, что это совершенно верно, хотя GET работают.
context.Routes.MapHttpRoute(
name: "V1/EmploymentApi",
routeTemplate: "api/v1/Employment/{action}/{jobId}",
defaults: new { controller = "Employment", jobId = RouteParameter.Optional, action = "Get" }
);
Дело № 1, кажется, противоречат друг другу из-за рамках ожидает действий, а не 221. Я хотел бы быть в состоянии получить все эти случаи работы.
Если маршрутизация 'апи/v1/Работа/{действие}/{JobId}', как на земле это соответствие ничего подобного "/ студенты/251/занятости/работы? –