Oto konfiguracja routingu w WebApiConfig.cs:Jak zdefiniować metodę PUT w routingu ograniczać się tylko do metod Put w kontrolerze bez parametru?
config.Routes.MapHttpRoute(
name: "DefaultApiPut",
routeTemplate: "api/{controller}",
defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Put) }
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get, HttpMethod.Post, HttpMethod.Delete) }
);
Oto mój kontroler:
public class MyController : ApiController {
[HttpPut]
public void Put()
{
//blah
}
}
Jakoś gdy on- ków klienta żądanie PUT z adresem URL /api/myController/12345
, to nadal są odwzorowywane na Put
metoda w MyController
, Spodziewam się błędu, takiego jak nie znaleziono zasobu.
Jak wymusić metodę Put
akceptować tylko żądania bez parametru?
Z góry dziękuję!
Ten przykładowy kod pracował dla mnie chyba, że miałem do określenia ograniczeń, jak pokazano na pytanie, a mianowicie: Ograniczenia: nowy {httpMethod = new HttpMethodConstraint (HttpMethod .Get)} –
Istnieją dwie klasy HttpMethodConstraint w .net 4.5.1. Jeden w System.Web.Routing, a drugi w System.Web.Http.Routing. Wymagają różnych wzorców parametrów, jeden akceptuje ciągi znaków, drugi szuka wyliczenia. Nie wiem jeszcze, czy mają inne zachowania poza tym. – Rozwel
@Rozwel dzięki! Uderzyłem głową trochę, nie mogąc przekonwertować błędu na string, ponieważ używałem system.web.routing not system.web.http.routing. – Matt