Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 约束条目';httpMethod';在路由上必须有一个字符串值_C#_Asp.net_Asp.net Web Api_Httpserver_Asp.net Web Api Routing - Fatal编程技术网

C# 约束条目';httpMethod';在路由上必须有一个字符串值

C# 约束条目';httpMethod';在路由上必须有一个字符串值,c#,asp.net,asp.net-web-api,httpserver,asp.net-web-api-routing,C#,Asp.net,Asp.net Web Api,Httpserver,Asp.net Web Api Routing,我有一个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") }

我有一个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/
)在浏览器中使用时不会出错,因此我确信问题一定是我通过
HttpClient
HttpSelfHostServer
发送请求的方式。我尝试过使用
HttpMethod.Get
常量,但这也引发了同样的错误


有人知道我如何解决这个问题吗?

请确保您使用的约束是:

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

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

这可能会帮助您,我没有访问WebApi Url对象的权限,无法使用他建议的解决方案。我发现路由方向可能是RouteDirection.UrlGeneration,没有找到httpMethod(因此出现异常)。如果不使用Url.Action()方法,如何将字符串值为“get”的httpMethod放入请求中?好的,我遇到了UrlHelper类,它似乎与控制器中的Url对象做了相同的事情。但是,现在我得到了一个与配置对象关联的新错误。我将在稍后更新我的问题,并提供更多详细信息……哎呀,配置对象当时为空。修复后,我回到了我开始的地方,第一个例外。哇,是的,就是这样。谢谢你,我已经和这个问题争论了一段时间了。是的,微软为了这个在MVC中可用但在不同程序集和名称空间下的Web API复制了每一个类,造成了一团混乱。这是一个非常常见的错误原因。答案很好,这是非常好的发现@DarinDimitrov,谢谢。