Web API 2のルーティング処理方法を理解する上で問題があります。私は、モデルを取るSave()
呼ばPUT
アクションでカスタムルートを追加しようとしたなどの標準的なアクションの観点からだけで正常に動作PostsController
、GET
、POST
、 .Net Web APIがルートと一致しない
- 引数。
- カスタムルートの前に
[HttpPut]
と[Route("save")]
を追加しました。また、WebAPIConfig.csにパターンを処理するように修正しましたapi/{controller}/{id}/{action}
- しかし、郵便番号の
http://localhost:58385/api/posts/2/save
(PUT
)に行くと、No action was found on the controller 'Posts' that matches the name 'save'
の行に沿ってエラーメッセージが表示されます。本質的に栄光の404. - もし私が経路を
[Route("{id}/save")]
に変更した場合、結果のエラーは残っています。
私は間違って何をしていますか?
WebAPIConfig.cs
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional, }
);
PostController.cs
// GET: api/Posts
public IHttpActionResult Get()
{
PostsStore store = new PostsStore();
var AsyncResult = store.GetPosts();
return Ok(AsyncResult);
}
// GET: api/Posts/5
public IHttpActionResult Get(string slug)
{
PostsStore store = new PostsStore();
var AsyncResult = store.GetBySlug(slug);
return Ok(AsyncResult);
}
// POST: api/Posts
public IHttpActionResult Post(Post post)
{
PostsStore store = new PostsStore();
ResponseResult AsyncResult = store.Create(post);
return Ok(AsyncResult);
}
// PUT: api/Posts/5 DELETED to make sure I wasn't hitting some sort of precedent issue.
//public IHttpActionResult Put(Post post)
// {
// return Ok();
//}
[HttpPut]
[Route("save")]
public IHttpActionResult Save(Post post)
{
PostsStore store = new PostsStore();
ResponseResult AsyncResponse = store.Save(post);
return Ok(AsyncResponse);
}
'RouteDebugger' NuGetパッケージを使用し、それがどこで一致するルートを見つけるために見てなかった、ルーティングエンジンが探しているまさにルートを教えてくれますし、それはそれを見つけることができなかった理由。ルーティングエンジンは、いくつかの言葉で記述することはできません。言わなければならないことはたくさんあります。 – CodingYoshi