L’entrée de contrainte ‘httpMethod’ sur l’itinéraire doit avoir une valeur de chaîne

J’ai un projet API Web asp.net et, dans mon fichier WebApiConfig , l’itinéraire suivant est défini:

 config.Routes.MapHttpRoute( name: "Web API Get", routeTemplate: "api/{controller}", defaults: new { action = "Get" }, constraints: new { httpMethod = new HttpMethodConstraint("GET") } ); 

À des fins de test d’intégration, je souhaite adresser une demande à un HttpSelfHostServer afin de vérifier que nous recevons les données appropriées en retour de l’appel de l’API. Je fais le HttpRequestMessage comme suit:

 var httpMethod = new HttpMethod("GET"); var request = new HttpRequestMessage(httpMethod, "http://localhost:XXXX/api/User/"); var results = _client.SendAsync(request).Result; 

Je m’attendrais à ce que cela appelle la méthode Get sur UserController, puis renvoie les résultats tels que définis dans cette méthode. Cependant, à la place, j’obtiens l’exception suivante:

System.InvalidOperationException: l’entrée de contrainte ‘httpMethod’ sur la route avec le modèle de route ‘api / {controller}’ doit avoir une valeur de chaîne ou être d’un type implémentant ‘IHttpRouteConstraint’

Cette même URL ( http://localhost:XXXX/api/User/ ) fonctionne sans erreur lorsque je l’utilise dans le navigateur. Je suis donc presque certain que le problème doit être HttpSelfHostServer à l’envoi de la demande au HttpSelfHostServer via le HttpClient . J’ai essayé d’utiliser la constante HttpMethod.Get à la place, mais cela a également généré la même erreur.

Quelqu’un at-il une idée de la façon dont je pourrais résoudre ce problème?

Assurez-vous que vous utilisez le proper type pour votre contrainte:

 constraints: new { httpMethod = new System.Web.Http.Routing.HttpMethodConstraint(HttpMethod.Get) } 

J’imagine que vous utilisiez System.Web.Routing.HttpMethodConstraint une classe totalement différente utilisée pour le routage ASP.NET MVC et qui n’a rien à voir avec le routage ASP.NET Web API.