To z pewnością zmiana z wersji beta na RC. W przykładzie podanym w pytaniu musisz teraz udekorować swoją akcję za pomocą [HttpGet] lub [AcceptVerbs ("GET")].
Powoduje to problem, jeśli chcesz mieszać akcje oparte na czasownikach (np. „GetSomething”, „PostSomething”) z akcjami nieopartymi na czasownikach. Jeśli spróbujesz użyć powyższych atrybutów, spowoduje to konflikt z jakąkolwiek akcją opartą na czasowniku w kontrolerze. Jednym ze sposobów uzyskania arount, które polegałoby na zdefiniowaniu oddzielnych tras dla każdego czasownika i ustawieniu domyślnej akcji na nazwę czasownika. To podejście może służyć do definiowania zasobów podrzędnych w interfejsie API. Na przykład następujący kod obsługuje: „/ zasób / id / dzieci”, gdzie id i dzieci są opcjonalne.
context.Routes.MapHttpRoute(
name: "Api_Get",
routeTemplate: "{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
context.Routes.MapHttpRoute(
name: "Api_Post",
routeTemplate: "{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = "Post" },
constraints: new { httpMethod = new HttpMethodConstraint("POST") }
);
Miejmy nadzieję, że przyszłe wersje interfejsu API sieci Web będą lepiej obsługiwać ten scenariusz. Obecnie w projekcie aspnetwebstack codeplex zarejestrowano problem, http://aspnetwebstack.codeplex.com/workitem/184 . Jeśli jest to coś, co chciałbyś zobaczyć, zagłosuj w tej sprawie.