Estoy usando la API web .Net MVC4 para (con suerte) implementar una API RESTful. Necesito pasar algunos parámetros al sistema y hacer que realice alguna acción, luego devolver una lista de objetos como resultado. Específicamente, paso dos fechas y devuelvo registros que se encuentran entre ellas. También estoy haciendo un seguimiento de los registros devueltos para que las llamadas posteriores no se vuelvan a procesar en el sistema.
He considerado algunos enfoques:
Serializar los parámetros en una sola cadena JSON y separarlos en la API. http://forums.asp.net/t/1807316.aspx/1
Pase los parámetros en la cadena de consulta.
¿Cuál es la mejor manera de pasar múltiples parámetros de consulta a una API relajante?Definición de los parámetros en la ruta: api / controller / date1 / date2
Usando un POST que inherentemente me permite pasar un objeto con params.
Investigando ODATA ya que la API web (actualmente) lo admite. Todavía no he hecho mucho con esto, así que no estoy muy familiarizado con él.
Parece que las prácticas REST adecuadas indican cuándo se extraen los datos, debe usar un GET. Sin embargo, GET también debería ser nulipotente (no produce efectos secundarios), y me pregunto si mi implementación específica viola eso ya que marco registros en el sistema API, por lo tanto, estoy produciendo efectos secundarios.
También me llevó a la cuestión de admitir parámetros variables. Si la lista de parámetros de entrada cambia, sería tedioso tener que redefinir su ruta para la Opción 3 si eso sucede mucho. Y qué podría pasar si los parámetros se definen en tiempo de ejecución ...
En cualquier caso, para mi implementación específica, ¿qué opción (si hay alguna) parece mejor?
Creo que la forma más fácil es simplemente usar
AttributeRouting
.Es obvio dentro de su controlador, ¿por qué querría esto en su
WebApiConfig
archivo Global ?Ejemplo:
Los
{}
nombres deben coincidir con sus parámetros.Tan simple como eso, ahora tiene un separado
GET
que maneja múltiples parámetros en esta instancia.fuente
WebApiConfig
archivo, pero esto es realmente mejor.Route
para parámetros con nombre (por ejemplo, parámetros de consulta)?Simplemente agregue una nueva ruta a las
WebApiConfig
entradas.Por ejemplo, para llamar:
añadir:
Luego agregue los parámetros a la llamada HTTP:
fuente
api/controller?start=date1&end=date2
estilo URI.Solo tuve que implementar una API RESTfull donde necesito pasar parámetros. Lo hice pasando los parámetros en la cadena de consulta en el mismo estilo que se describe en el primer ejemplo de Mark "api / controller? Start = date1 & end = date2"
¿En el controlador usé un consejo de URL dividida en C #?
En mi caso, estaba llamando a WebApi a través de Ajax con el siguiente aspecto:
Espero que esto ayude...
fuente
Encontré una excelente solución en http://habrahabr.ru/post/164945/
fuente
Get
), ¿puede seguir utilizando[FromUri]
? Parece que no puedo hacer que eso funcione.El uso de GET o POST se explica claramente por @LukLed . Con respecto a las formas en que puede pasar los parámetros, sugeriría ir con el segundo enfoque (tampoco sé mucho sobre ODATA ).
Esto no es fácil de usar ni SEO.
Este es el enfoque preferible habitual.
Este definitivamente no es un buen enfoque. Esto hace sentir que alguien
date2
es un sub recurso dedate1
y ese no es el caso. Tanto eldate1
ydate2
son parámetros de consulta y viene en el mismo nivel.En un caso simple, sugeriría un URI como este,
Pero personalmente me gusta el siguiente patrón de URI, pero en este caso tenemos que escribir un código personalizado para mapear los parámetros.
fuente
Utilice el enlace de parámetros como se describe completamente aquí: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
fuente
Ambos parámetros del enlace raíz ({uno}, {dos}) y los parámetros de la función Obtener (uno, dos) deben ser iguales
fuente
Sé que esto es muy viejo, pero quería lo mismo recientemente y esto es lo que encontré ...
Así que ahora en su dirección / URI / ...
http (s): // myURL / api / myController /? var = getnew & test = test
Resultado: "Prueba encontrada"
http (s): // myURL / api / myController /? var = getnew & test = anything
Resultado: "No se pudo encontrar esa prueba"
fuente
Ahora puedes hacer esto simplemente usando
esto devolverá: "valor: 5 10"
si lo llama con https: // yourdomain / api / yourcontroller? id = 5 & abc = 10
fuente
fuente