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.