「api/{controller}/{id}」のデフォルトルートを使用するWeb APIプロジェクトがあります。「id」はオプションです。ほとんどの場合、これで十分ですが、場合によっては属性ルーティングが必要です。この特定のケースでは、顧客IDが必須で、orderIDはオプションの「api/Customers/{customerID}/Orders/{orderID}」があります。もともと私のコードでは注文IDだけが必要でしたが、特定の顧客の注文を引き出す方法が必要でしたので、これを可能にする方法で属性ルートを使用しました。属性ルーティングを使用してWeb APIエンドポイントにPOSTできない
問題なくGET操作を実行できますが、POST操作を実行しようとすると500エラーが発生します。私のオブジェクトが作成されても、奇妙なことですが、データベースの挿入が作成された後に例外がスローされる必要がありますが、デバッガが機能しないため、これを確認できません。私のAPIは私のUIとは別のプロジェクトにあります。何らかの理由で私はAPIプロジェクトでデバッガを動作させることができませんので、私が設定したブレークポイントは機能しません。
私のPOSTメソッドのコードの最後の行はこれです:
return CreatedAtRoute("DefaultApi", new { id = order.ID }, order);
このメソッドの最初の引数は、ルート名で、上記の1はWebApiConfig.csで指定されたデフォルトルートのためです。ただし、この特定のルートはデフォルトとは異なります。
[Route("api/Customers/{customerID:int}/Orders")]
これが問題になりますか?問題のルートは2つの引数を使用するので、私はそれらをCreatedAtRouteメソッドのrouteValues(second)引数で指定する必要があると思います。
これを行うには何が必要ですか?私はPUTとDELETE操作の実行に問題があるかもしれないと思うが、変更または削除する前にオブジェクトを作成する必要がある。