私はルートにStartup.csに次のコードを介したHTTP動詞に基づいてアクションをASP.NET MVC 2のコアを取得しようとしている:HTTP動詞に基づくルートアクション?
app.UseMvc(routes =>
{
routes.MapRoute(
name: "post",
template: "api/{controller}/{id?}",
defaults: new { action = "Post" },
constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint("POST") })
);
routes.MapRoute(
name: "delete",
template: "api/{controller}/{id?}",
defaults: new { action = "Delete" },
constraints: new RouteValueDictionary(new { httpMethod = new HttpMethodRouteConstraint("DELETE") })
);
routes.MapRoute(
name: "default",
template: "api/{controller}/{action=Get}/{id?}");
});
すなわち、
- クライアントの場合私の
FooController : Controller
クラスでメソッドを実行するGET http://example.com/api/foo
を呼び出します。 GET http://example.com/api/foo/123
を呼び出すと、FooController : Controller
クラスのGet(int id)
メソッドが実行されます。POST http://example.com/api/foo
を呼び出すと、FooController<T> : Controller
クラスのPost([FromBody] T postedItem)
メソッドが実行されます。POST http://example.com/api/foo/123
を呼び出すと、Post(int id, [FromBody] T postedItem)
メソッドがFooController<T> : Controller
クラスで実行されます。私はプロジェクトを実行すると、私のコントローラのいずれかを実行していないように私FooController : Controller
にDelete(int id)
メソッドを実行します
DELETE http://example.com/api/foo/123
を呼び出す場合は、。私はいくつかのRazorページを持っていますが、コントローラベースのルートはすべて404を返すだけです。デフォルトのルートさえも機能していないようです。 私はhttps://github.com/ardalis/AspNetCoreRouteDebuggerを使用して問題を絞り込むのを手伝ってきましたが、まだ問題が見つかっていません。利用可能なアクションとしてコントローラ上のメソッドを表示しますが、MapRoute
で追加された名前、テンプレート、または制約は表示されません。私は他の有用なツールも知ってうれしいです。
FWIW、私はここと同じ動詞の制約を使用しようとしている: https://github.com/aspnet/Routing/blob/2.0.1/src/Microsoft.AspNetCore.Routing/RequestDelegateRouteBuilderExtensions.cs#L252-L268
'FooControllerは'何ですか?コアは構築中に型を提供する方法がないため、ジェネリックコントローラに直接ルーティングすることはできません。ベースコントローラーとして使用することはできますが、タイプを「実装する」もの、つまりBarController:FooControlller にルーティングする必要があります。 –
@ChrisPratt:これは、さまざまなコントローラが異なるPOSTボディスキーマを期待し、それぞれのタイプの[FromBody]引数を受け取ることを伝えるための擬似コードです。メソッドのパラメータとして具体的な型を入れることは間違いありません。各クラスは同じメソッド名を持ちますが、異なる具体的な型が必要です。 P.S.私はあなたの映画が大好きです(おそらくあなたはChris Prattですか?):https://www.youtube.com/embed/kj802AGE9Bg?start=22&end=25 – steamer25