定义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中。

定义Web API路由

您的配置是为计划处理的URL定义路由的最佳方式。无法合并这两个路由,因为处理两个分段URL的第一个路由将第二个分段分配给id,而处理三个分段URL时的第二个路由则将第二段分配给action。有两个不同的路由是必要的,因为根据URL有两个或三个段来分配不同的值。