Web API を介して機能を公開しています。公開したい URL は次のとおりです。
- /api/organizations (組織のリストを返す (GET))
- /api/organizations?$top=2 (oData (GET) でフィルタリングされた組織のリストを返します)
- /api/organizations/2 (ID 2 の組織の詳細を返す (GET))
- /api/organizations/addinstitution (新しい機関を組織に追加します (POST))
- /api/organizations/removeinstitution (機関の削除 (POST))
そのためには、WebApiConfigクラスのルーティングを次のように変更する必要がありました。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional },
constraints: new { id = @"\d*" }
);
config.Routes.MapHttpRoute(
name: "SpecificActionsRoute",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
これは機能しているように見えますが、これがルートを定義する最も最適な方法であるかどうか疑問に思っていました. 2 つのルートが必要ですか? もっと良い方法はありますか?
編集:完全にするために、次のような属性ルーティングも使用していると言わざるを得ません。
[GET("organizations")]
public IQueryable<OrganizationSummaryViewModel> Get(ODataQueryOptions<Organization> oDataQuery)
{
}
[GET("organizations/{id}")]
public OrganizationDetailsViewModel Get(int id)
{
}
[POST("organizations/addinstitutiontoorganization")]
public AddInstitutionToOrganizationCommandResult AddInstitutionToOrganization(AddInstitutionToOrganizationCommand command)
{
}
[POST("organizations/anotheroperation")]
public AnotherOPerationCommandResult AnotherOperation(AnotherOperationCommand command)
{
}
編集 2:属性ルートを削除することになり、2 つのテンプレート化されたルートを WebApiConfig に保持しました。