Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Asp.net web api2 将API从类似REST的路由转换为命名参数_Asp.net Web Api2_Restful Url_Attributerouting - Fatal编程技术网

Asp.net web api2 将API从类似REST的路由转换为命名参数

Asp.net web api2 将API从类似REST的路由转换为命名参数,asp.net-web-api2,restful-url,attributerouting,Asp.net Web Api2,Restful Url,Attributerouting,我已经创建了一个API来查找这样的参数 http://server/api/contollerName/param1/param2/param3 对于此模式,我使用了以下method属性: [Route("api/myController/{param1}/{param2}/{param3}")] [HttpGet] public IHttpActionResult myMethod(int param1, int param2, int param3) { // Method implem

我已经创建了一个API来查找这样的参数

http://server/api/contollerName/param1/param2/param3

对于此模式,我使用了以下method属性:

[Route("api/myController/{param1}/{param2}/{param3}")]
[HttpGet]
public IHttpActionResult myMethod(int param1, int param2, int param3)
{
  // Method implementation goes here
}
然而,将要使用API的人(UI开发人员)更希望API设置如下

http://server/api/controllerName?param1=value¶m2=value¶m3=value


我认为我需要做的就是删除方法的属性,Web Api路由引擎将根据参数名称选择正确的方法,这一想法正确吗?有没有一种方法可以像最初那样修改路由以显式定义方法和参数?我喜欢指定路由,这样就不会对将要执行的方法产生歧义。

您认为需要做的就是删除方法的属性,这是正确的。您将无法定义该格式的管线模板

http://server/api/controllerName?param1=value¶m2=value¶m3=value

因为ASP.Net Web API2路由模板不允许在路由模板中包含“?”字符。你能到达的最近的地方是

http://server/api/controllerName/MethodName/param1={param1},param2={param2}


另外请注意,如果您在路由模板中有-,则当您请求命中该API时,ASP.NET将抛出一个检测到危险的Request.Path值的错误。但是,通过引用此

可以解决此问题,您认为只需删除方法的属性即可。您将无法定义该格式的管线模板

http://server/api/controllerName?param1=value¶m2=value¶m3=value

因为ASP.Net Web API2路由模板不允许在路由模板中包含“?”字符。你能到达的最近的地方是

http://server/api/controllerName/MethodName/param1={param1},param2={param2}

另外请注意,如果您在路由模板中有-,则当您请求命中该API时,ASP.NET将抛出一个检测到危险的Request.Path值的错误。但这可以通过参考此解决