私は、新しいコントローラーごとに同じ基本コードを複製する必要がないように、汎用リポジトリーを使用して API コントローラーに基本的な CRUD メソッドを提供する基本コントローラーを用意するというアイデアをいじっています。しかし、ルーティング属性がベースコントローラーにあるときに認識されるという問題が発生しています。私が抱えている問題を正確に示すために、非常に単純な WebAPI コントローラーを作成しました。
メインコントローラーにGet
メソッドがあり、それが直接から継承されてApiController
いる場合、問題はなく、これは期待どおりに機能します。
[RoutePrefix("admin/test")]
public class TestController : ApiController
{
[Route("{id:int:min(1)}")]
public string Get(int id)
{
return "Success";
}
}
Get
メソッドをベース コントローラーに移動すると、404 ページの内容が返されます。
[RoutePrefix("admin/test")]
public class TestController : TestBaseController
{
}
public class TestBaseController : ApiController
{
[Route("{id:int:min(1)}")]
public string Get(int id)
{
return "Success";
}
}
さらに興味深いメモ:
でアクションにアクセスできます
GET
/Test/1
。そのため、まだデフォルトルートに基づいて検索しています。にアクセスしようとすると
POST
/admin/test
、次の JSON が返されます{ "Message":"リクエスト URI ' http://test.com/admin/test ' に一致する HTTP リソースが見つかりませんでした。", "MessageDetail":"'admin' という名前のコントローラーに一致するタイプが見つかりませんでした。 " }
ベースコントローラーからの属性でルーティングを機能させる方法を知っている人はいますか?