Tengo dos API

[HttpGet]
public bool WithoutParamBooleanResponse()

Y

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

Sin embargo, esto lleva a tener un error

Se encontraron varias acciones que coinciden con la solicitud de la API web.

Si tuviera que agregar otro parámetro ficticio para el segundo método, todo funciona. ¿Podría alguien explicar por qué un método sin parámetros y un método con un parámetro complejo son vistos similares por la API?

0
Anu Viswan 28 dic. 2016 a las 20:28

3 respuestas

La mejor respuesta

¿Por qué la API ve un método sin parámetros y un método con un parámetro complejo?

Cuando un parámetro se anota con el atributo FromUri y es un tipo complejo, el valor se construye a partir de los parámetros de consulta, por lo tanto, la ruta para ambos métodos sería la misma (ya que los parámetros de consulta no se tienen en cuenta).

1
Arturo Menchaca 28 dic. 2016 a las 17:50

Intenta crear una nueva ruta como:

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

E intenta agregar un atributo en tu acción

[Route("ComplexReferenceTypeParamStringResponse/{VariableComplexRef?}"]
1
Roman Marusyk 28 dic. 2016 a las 18:05

Debe agregar una acción a su URL de enrutamiento.

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

Al llamar a una ruta y solo pasar un controlador, la ruta supone que solo hay una acción para cada método (GET, POST ...) y la busca. Es por eso que tiene un error con más de un GET.
Cuando también pasa una acción, es más específico buscar la acción correcta con este método

0
M B 28 dic. 2016 a las 17:40