10

次のように、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 }
);
4

1 に答える 1

9

ルートにアクションを含める必要があります。

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
于 2012-04-07T05:06:11.060 に答える