我通过Web API公开功能,我想要公开的网址是:
为了做到这一点,我不得不改变 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中保留了两个模板化路由。
答案 0 :(得分:0)
您的配置是定义您计划处理的URL的路由的最佳方式。无法合并这两条路线,因为您处理两段网址的第一条路线将第二条段分配给id
,而您处理三段网址的第二条路线则将第二条段分配给action
。必须有两个不同的路由,因为您根据URL中是否有两个或三个段来分配不同的值。