He estado tratando de añadir un segundo método POST a la clase ValuesController por defecto que toma un parámetro id y actuar idéntico al método PUT, así:ASP.NET Web API: ¿Múltiples métodos POST en un controlador?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
namespace WebCalendar.Controllers {
public class ValuesController : ApiController {
// GET /values
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
// GET /values/5
public string Get(int id) {
return "value";
}
// POST /values
public void Post(string value) {
}
// POST /values/5
public void Post(int id, string value) {
Put(id, value);
}
// PUT /values/5
public void Put(int id, string value){
}
// DELETE /values/5
public void Delete(int id) {
}
}
}
El problema es que cuando agrego esta segunda método post, cada vez que hago una petición POST, me sale el error:
"No action was found on the controller 'values' that matches the request."
Si comento hacia fuera uno de los métodos (no importa cuál), POST trabajará con el otro método. He intentado cambiar el nombre de los métodos, e incluso usando [HttpPost]
en ambos, pero nada ha funcionado.
¿Cómo puedo tener más de un método POST en un solo ApiController?
EDITAR
Esta es la única ruta que estoy usando:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { controller = "values", id = RouteParameter.Optional }
);
¿Puede usted por favor, puesto que su rutas? –
No hay límite para la cantidad de métodos de publicación que puede tener en el controlador. Sospecho que es un problema de enrutamiento – TGH
¿Cuál es la URL que está llamando para que esto falle? ¿Qué sucede si proporciona una cadena de consulta para el valor? Creo que el problema es que el parámetro de valor debe estar ahí para que la ruta funcione, ya que no está marcada como opcional. –