次のように、id パラメータを取り、PUT メソッドと同じように動作する 2 つ目の POST メソッドをデフォルトの ValuesController クラスに追加しようとしています。
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) {
}
}
}
問題は、この 2 番目の post メソッドを追加すると、POST リクエストを行うたびにエラーが発生することです。
"No action was found on the controller 'values' that matches the request."
メソッドの 1 つをコメントアウトすると (どちらでもかまいません)、POST は他のメソッドで動作します。メソッドの名前を変更し、両方で使用しようとしまし[HttpPost]
たが、何も機能しませんでした。
単一の ApiController に複数の POST メソッドを含めるにはどうすればよいですか?
編集
私が使用している唯一のルートは次のとおりです。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { controller = "values", id = RouteParameter.Optional }
);