定义Web API路由
本文关键字:路由 API Web 定义 | 更新日期: 2023-09-27 18:29:00
我通过web API公开功能,我想要公开的URL例如:
- /api/组织(返回组织列表(GET))
- /api/组织$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中。
您的配置是为计划处理的URL定义路由的最佳方式。无法合并这两个路由,因为处理两个分段URL的第一个路由将第二个分段分配给id
,而处理三个分段URL时的第二个路由则将第二段分配给action
。有两个不同的路由是必要的,因为根据URL有两个或三个段来分配不同的值。