次のように私は2つのコントローラを持っている:珍しい[RoutePrefix]行動
[RoutePrefix("v1/user/something")]
public class SomethingsController : ApiController
{
[Route("{id}")]
[HttpGet]
[ResponseType(typeof(SomethingsViewModel))]
public async Task<IHttpActionResult> GetAsync([FromUri]int id)
{
}
}
[RoutePrefix("v1/user")]
public class UserController : ApiController
{
[Route("{id}")]
[HttpGet]
[Authorize(Roles = "Super Admin")]
public async Task<IHttpActionResult> GetByIdAsync([FromUri]int id)
{
}
}
は、今すぐ上記のコードを見ることで、私は、次の2つのルートが作成されていることを思うだろう:
- V1 /ユーザ/何か/ {ID}
- V1 /ユーザ/ {ID}
しかし残念ながら、いくつかの理由のために、それはないですケース。上記のいずれかのルートにアクセスしようとすると、次の例外メッセージが表示され続けます。
URLに一致する複数のコントローラタイプが見つかりました。これは、複数のコントローラの属性ルートが要求されたURLと一致する場合に発生します。 次マッチングコントローラの種類発見した要求:MyProject.Api.Controllers.UserControllerを、MyProject.Api.Controllers.SomethingsController
は私が私が間違っていたり、小さなディテールをやっているかもしれないものを考え出すに私を助けてください。ここで欠けている。
属性ルーティングの場合、Web APIはリクエストに一致するすべてのコントローラを検索しようとします。複数のコントローラがこれを処理できることが分かったら、例外がスローされます –
@Div私はそれを知っていますが、上記のコードを見ると複数のコントローラがRoutePrefix異なっています。 – haseebahmed7
@ haseebahmed7それらのルートプレフィックスは異なるが、解決されたルートは一致する。たとえば 'v1/user/{id}'と 'v1/user/something/{id}'と一致する 'v1/user/{id}'のようなものです。 Route prefixとRoute属性を組み合わせて、ルートテーブルに追加される完全なルートを作成します。 – Nkosi