私は、非常に単純なことだと思っていた Web API ルーティングをセットアップしようとしています。ただし、Web API でのルーティングは、さまざまな HTTP 動詞と一致していないようです。これらのアクションを備えたこのコントローラーがあるとします...
public class AvalancheController : ApiControllerBase
{
// GET api/avalanche
public IEnumerable<Avalanche> Get() {}
// GET api/avalanche/5
public Avalanche Get(int id) {}
// GET api/avalanche/ActionTest/5
[ActionName("ActionTest")]
public Avalanche GetActionTest(int id) {}
// GET api/avalanche/ActionTest/2
[ActionName("ActionTest2")]
public Avalanche GetActionTest2(int id) {}
// POST api/avalanche
public void Post([FromBody]Avalanche value) {}
// PUT api/avalanche/5
public void Put(int id, [FromBody]Avalanche value) {}
// PUT api/avalanche/test/5
[ActionName("Test")]
public void PutTest(int id, [FromBody]Avalanche value) {}
// DELETE api/avalanche/5
public void Delete(int id) {}
}
そして、次のルートが定義されています...
config.Routes.MapHttpRoute(
name: "ActionRoutes",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new
{
controller = "Avalanche",
action = "(ActionTest|ActionTest2|Test)"
}
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
その後、次のルートが定義されてしまいます...
GET api/Avalanche/ActionTest/{id}
GET api/Avalanche/ActionTest2/{id}
PUT api/Avalanche/Test/{id}
GET api/Avalanche
POST api/Avalanche
DELETE api/Avalanche/{id}
デフォルトの PUT ルートが選択されないのはなぜですか? デフォルトの GET とデフォルトの PUT のルーティングの違いは何ですか? 考えられるあらゆる方法で関数を装飾しようとしましたが、同じ結果が得られます。
主に、デフォルトの PUT ルートを取得する方法を知りたいです。これらのルートを変更する方法について提案があれば、コントローラーごとにルートを指定してアクション名を指定する必要がなくなります。これも素晴らしいでしょう。
ありがとう!
イアン
編集:今朝、次のルートも定義されていないことに気付きました..
GET api/Avalanche/{id}