我有两个API,
[HttpGet]
public bool WithoutParamBooleanResponse()
和
[HttpGet]
public string ComplexReferenceTypeParamStringResponse([FromUri]ComplexRefType VariableComplexRef)
但是,这会导致错误
找到了与请求web api get匹配的多个操作。
如果我要为第二种方法添加另一个虚拟参数,整个过程都有效。有人可以解释为什么API会看到无参数方法和带有复杂参数的方法相似吗?
答案 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错误的原因。
当您也传递一个动作时,使用此方法查找正确的动作更为具体