6

我有一个 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") }
    );

出于集成测试的目的,我想向 an 发出请求,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常量,但这也引发了同样的错误。

有谁知道我该如何解决这个问题?

4

1 回答 1

18

确保您使用的是proper typefor 您的约束:

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

我猜你使用System.Web.Routing.HttpMethodConstraint的是一个完全不同的用于 ASP.NET MVC 路由的类,它与 ASP.NET Web API 路由无关。

于 2013-08-23T15:07:03.973 回答