[解決済み] ASP.NET Web APIで複数のGETメソッドを持つ単一のコントローラ
2022-04-15 16:04:59
質問内容
Web APIで、似たような構造のクラスがありました。
public class SomeController : ApiController
{
[WebGet(UriTemplate = "{itemSource}/Items")]
public SomeValue GetItems(CustomParam parameter) { ... }
[WebGet(UriTemplate = "{itemSource}/Items/{parent}")]
public SomeValue GetChildItems(CustomParam parameter, SomeObject parent) { ... }
}
個々のメソッドをマップすることができるので、適切な場所で適切なリクエストを取得するのが非常に簡単でした。類似のクラスで、単一の
GET
メソッドもありますが
Object
パラメータを使用することに成功しました。
IActionValueBinder
. しかし、上記のような場合、次のようなエラーが発生します。
Multiple actions were found that match the request:
SomeValue GetItems(CustomParam parameter) on type SomeType
SomeValue GetChildItems(CustomParam parameter, SomeObject parent) on type SomeType
をオーバーライドすることでこの問題にアプローチしようとしています。
ExecuteAsync
メソッドに
ApiController
が、今のところうまくいきません。この問題に関して何かアドバイスがあれば教えてください。
編集:言い忘れましたが、現在、ルーティングに異なるアプローチを持つASP.NET Web API上でこのコードを動かそうとしています。問題は、このコードをASP.NET Web API上でどのように動作させるかです。
どのように解決するのですか?
これは、余分なGETメソッドをサポートし、通常のRESTメソッドもサポートするために、私が見つけた最良の方法です。 WebApiConfigに以下のルートを追加してください。
routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");
routes.MapHttpRoute("DefaultApiGet", "Api/{controller}", new { action = "Get" }, new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) });
routes.MapHttpRoute("DefaultApiPost", "Api/{controller}", new {action = "Post"}, new {httpMethod = new HttpMethodConstraint(HttpMethod.Post)});
この解決策を以下のテストクラスで検証してみました。 以下のコントローラの各メソッドを正常にヒットさせることができました。
public class TestController : ApiController
{
public string Get()
{
return string.Empty;
}
public string Get(int id)
{
return string.Empty;
}
public string GetAll()
{
return string.Empty;
}
public void Post([FromBody]string value)
{
}
public void Put(int id, [FromBody]string value)
{
}
public void Delete(int id)
{
}
}
以下のリクエストに対応していることを確認しました。
GET /Test
GET /Test/1
GET /Test/GetAll
POST /Test
PUT /Test/1
DELETE /Test/1
備考 GET アクションが 'Get' で始まらない場合は、メソッドに HttpGet 属性を追加するとよいでしょう。
関連
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】HRESULTからの例外:0x800A03ECエラー
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] Chromeを使用してASP.NET Web APIがXMLの代わりにJSONを返すようにするにはどうすればよいですか?
-
[解決済み] ASP.NET Web APIに整数の配列を渡しますか?
-
[解決済み] ASP.NET Web APIでエラーを返すためのベストプラクティス
-
[解決済み】ASP.NET Web APIでコントローラからバイナリファイルを返す。
-
[解決済み】ASP.NET Web APIのJWT認証について
-
[解決済み] ASP.NET Web APIでのユーザー認証
-
[解決済み] リモートホストのIPアドレスの取得
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】"出力タイプがクラスライブラリのプロジェクトは直接起動できない"
-
[解決済み】GDI+、JPEG画像をMemoryStreamに変換する際にジェネリックエラーが発生しました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】プロセスが実行されているかどうかを知るには?