我通过 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 }
);
这似乎可行,但我想知道这是否是定义路线的最佳方式。我需要两条路线吗?有没有更好的方法?
编辑:要完整,我不得不说我也使用属性路由,例如:
[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:我最终删除了属性路由,并将两个模板化路由保留在 WebApiConfig 中。