定义Web API路由

四级

我正在通过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中。

渐近故障

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章