我有一个asp.net Web API项目,在我的WebApiConfig
文件中,我定义了以下路由:
config.Routes.MapHttpRoute(
name: "Web API Get",
routeTemplate: "api/{controller}",
defaults: new { action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
出于集成测试的目的,我想向HttpSelfHostServer
发出请求,以验证我们是否从api调用中收到了正确的数据。我正在制作HttpRequestMessage
如下:
var httpMethod = new HttpMethod("GET");
var request = new HttpRequestMessage(httpMethod, "http://localhost:XXXX/api/User/");
var results = _client.SendAsync(request).Result;
我希望这会调用UserController上的Get方法,然后返回该方法中定义的结果。但是,我得到以下异常:
System.InvalidOperationException:路由模板'api / {controller}'的路由上的约束条目'httpMethod'必须具有字符串值或者是实现'IHttpRouteConstraint'的类型
当我在浏览器中使用它时,同样的URL(http://localhost:XXXX/api/User/
)可以正常工作,所以我很确定问题必须与我通过HttpSelfHostServer
发送请求的方式相同HttpClient
。我尝试使用HttpMethod.Get
常量,但也引发了相同的错误。
有谁知道如何解决这个问题?
答案 0 :(得分:16)
确保您使用proper type
作为约束:
constraints: new { httpMethod = new System.Web.Http.Routing.HttpMethodConstraint(HttpMethod.Get) }
我猜你使用的是System.Web.Routing.HttpMethodConstraint
,这是一个与ASP.NET MVC路由完全不同的类,它与ASP.NET Web API路由无关。