获取带/不带参数的请求和API

时间:2016-12-28 17:28:11

标签: c# asp.net-web-api

我有两个API,

[HttpGet]
public bool WithoutParamBooleanResponse()

[HttpGet]
public string ComplexReferenceTypeParamStringResponse([FromUri]ComplexRefType VariableComplexRef)

但是,这会导致错误

  

找到了与请求web api get匹配的多个操作。

如果我要为第二种方法添加另一个虚拟参数,整个过程都有效。有人可以解释为什么API会看到无参数方法和带有复杂参数的方法相似吗?

3 个答案:

答案 0 :(得分:1)

尝试创建一条新路线,如:

 config.Routes.MapHttpRoute( 
     name: "ComplexRefType",
     routeTemplate: "api/{controller}/{action}/{VariableComplexRef}", 
     defaults: new { VariableComplexRef = RouteParameter.Optional }
 );

并尝试在您的操作上添加属性

[Route("ComplexReferenceTypeParamStringResponse/{VariableComplexRef?}"]

答案 1 :(得分:1)

  

为什么无参数方法和具有复杂参数的方法是   看到类似的API?

当参数使用FromUri属性进行注释并且是复杂类型时,该值是从查询参数构造的,因此两种方法的路径都是相同的(因为查询参数不会被考虑在内) )。

答案 2 :(得分:0)

您需要在路由网址中添加操作。

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } 

当调用路由并仅传入控制器时,路由假定每个方法只有一个操作(GET,POST ..)并查找它。这就是您遇到多个GET错误的原因。
当您也传递一个动作时,使用此方法查找正确的动作更为具体