Suponiendo que está usando las rutas por defecto la respuesta corta es: el método definido en primer lugar (en la parte superior) de su clase, será llamado. el otro método es inaccesible
NOTA: el beta se comportó como se describió anteriormente para 'emparejar múltiples métodos' - la versión de lanzamiento de RC & es un poco más OCD. Lanza un error si hay múltiples coincidencias potenciales. Este cambio elimina la confusión de múltiples coincidencias ambiguas. Al mismo tiempo, reduce nuestra capacidad para mezclar las interfaces de estilo REST y RPC en el mismo controlador, dependiendo de la orden de las rutas superpuestas &.
Stealing liberalmente de another post I wrote on the topic:
WebAPI a juego Semántica
la coincidencia semántica utilizado por WebAPI es bastante simple.
- coincida con el nombre de la acción con el verbo (verbo = llegar? Busque método comenzando con "get")
- si se pasa un parámetro, la API busca una acción con un parámetro
Por lo tanto, en el ejemplo del código, una solicitud GET sin un parámetro coincide con la función Get*()
sin parámetros. A Obtener contenido e ID busca un Get***(int id)
.
Ejemplos
Mientras que la semántica juego es simple, se crea una cierta confusión para los desarrolladores MVC (bueno, al menos este desarrollador). Veamos algunos ejemplos:
Nombres impares - Tu método get puede llamarse cualquier cosa, siempre que comience con "get". Por lo tanto, en el caso de un controlador de widgets, puede asignarle un nombre a sus funciones GetStrawberry()
y seguirá coincidiendo. Piense en el juego como algo parecido a: methodname.StartsWith("Get")
métodos de emparejamiento múltiples - ¿Qué pasa si usted tiene dos consigue métodos sin parámetros?GetStrawberry()
y GetOrange()
. Lo mejor que puedo decir es que la función definida primero (la parte superior del archivo) en tu código gana ... extraño. Esto tiene el efecto secundario de hacer que algunos métodos en su controlador sean inalcanzables (al menos con las rutas predeterminadas) ... extraño.
ACTUALIZACIÓN
@WinFXGuy - Este fue un poco largo para poner en un comentario, pero ...
no saltar a conclusiones! Traté de responder a la pregunta que planteaste, pero eso es solo la mitad de la historia. Hay mucho que puede hacer para cambiar el comportamiento predeterminado.
Primero, WebAPI admite gran parte de las especificaciones oData. Si realiza una burbuja de IQueryable
hasta su controlador, los parámetros oData se integran automáticamente con el objeto de consulta. Toma parámetros como $filter
, $top
y $skip
. Entonces, en su caso, puede escribir un método y pasar algo como $filter=sale_date neq null
.
Además, puede aplicar el atributo [ResultLimit]
para evitar que las personas soliciten 15 mil millones de registros.
Segundo puede modificar las rutas. Las rutas predeterminadas apuntan hacia una API REST, donde generalmente se tiene 1 controlador por entidad. Puede cambiar las rutas y hacerlo de estilo RPC.
Si miran mi publicación vinculada, explico cómo mantuve el enlace de ruta predeterminado, agregué 'subcarpetas' y también permití llamadas de métodos adicionales para escenarios donde necesitaba GetAllProducts()
y GetSoldProducts()
.
no me gusta lo que estoy leyendo! Ese tipo de limitaciones asp.net web api capabilites. – WinFXGuy
@WinFXGuy: demasiado tiempo para comentarios ... ver la actualización – EBarr
Encontré que mira los nombres de los parámetros para resolver las sobrecargas. Entonces api/food? Name = orange llamado GetFoodByName (nombre de cadena), y api/food? Category = fruit llamado GetFoodByCategory (categoría de cadena). –