The Constraint Entry 'httpMethod' on the Route Must Have a String Value
asp.net, asp.net-web-api, asp.net-web-api-routing, c#, httpserver
Solution
Make sure that you are using the `proper type` for your constraint:
constraints: new { httpMethod = new System.Web.Http.Routing.HttpMethodConstraint(HttpMethod.Get) }
I guess you were using `System.Web.Routing.HttpMethodConstraint` which is an entirely different class used for ASP.NET MVC routing and which has nothing to do with ASP.NET Web API routing.
Problem
I have an asp.net Web API project, and in my `WebApiConfig` file, I have the following route defined: ``` config.Routes.MapHttpRoute( name: "Web API Get", routeTemplate: "api/{controller}", defaults: new { action = "Get" }, constraints: new { httpMethod = new HttpMethodConstraint("GET") } ); ``` For integration testing purposes, I want to make a request to an `HttpSelfHostServer` to verify that we are receiving the proper data back from the api call. I am making the `HttpRequestMessage` as follows: ``` var httpMethod = new HttpMethod("GET"); var request = new HttpRequestMessage(httpMethod, "http://localhost:XXXX/api/User/"); var results = _client.SendAsync(request).Result; ``` I would expect that this would call the Get method on the UserController and then return the results as defined in that method. However, I instead get the following exception: System.InvalidOperationException: The constraint entry 'httpMethod' on the route with route template 'api/{controller}' must have a string value or be of a type which implements 'IHttpRouteConstraint' This same url (`http://localhost:XXXX/api/User/`) works without error when I use it in the browser, so I am pretty sure the issue has to be in the way I am sending the request to the `HttpSelfHostServer` through the `HttpClient`. I have tried using the `HttpMethod.Get` constant instead, but that also threw the same error. Does anyone have any idea how I could resolve this issue?