Ich habe versucht, eine zweite POST-Methode auf den Standard ValuesController Klasse hinzuzufügen, die ein ID-Parameter übernehmen und auf die PUT-Methode identisch handeln, etwa so:ASP.NET Web API - Mehrere POST-Methoden auf einem Controller?
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) {
}
}
}
Problem ist, wenn ich diese zweite hinzufügen post-Methode, ich jederzeit eine POST-Anforderung machen, erhalte ich die Fehlermeldung:
"No action was found on the controller 'values' that matches the request."
Wenn ich eine der Methoden auf Kommentar (keine Rolle spielt, welche), POST mit dem anderen Verfahren arbeitet. Ich habe versucht, die Methoden umzubenennen und sogar [HttpPost]
auf beiden von ihnen zu verwenden, aber nichts hat funktioniert.
Wie kann ich mehr als eine POST-Methode in einem einzigen ApiController haben?
EDIT
Hier ist der einzige Weg, die ich verwende:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { controller = "values", id = RouteParameter.Optional }
);
Können Sie bitte posten Sie Ihre Routen? –
Keine Begrenzung für wie viele Post-Methoden Sie auf dem Controller haben können. Ich vermute, dass es sich um ein Routing-Problem handelt. – TGH
Wie lautet die URL, die Sie anrufen, damit dies fehlschlägt? Was passiert, wenn Sie eine Abfragezeichenfolge für value angeben? Ich denke, das Problem ist, dass der Value-Parameter da sein muss, damit das Routing funktioniert, da es nicht als optional gekennzeichnet ist. –