在ASP.NET WebApi路由中的{controller}之前添加自定义参数

时间:2014-04-30 14:03:19

标签: asp.net-web-api

我想为Owin WebApi创建一个路由模板,如下所示:

cfg.Routes.MapHttpRoute(
            "API Default", "{myparam}/{controller}/{action}",
            new { id = RouteParameter.Optional });

因为我在控制器选择之前定义了需要参数的控制器。

我试图删除参数并将其设置为控制器上的RoutePrefixAttribute但它不起作用。

{controller}必须是路线的第一个动态参数吗?

2 个答案:

答案 0 :(得分:1)

我会使用某种形式的基于属性的路由来基于{myparam}转到不同的控制器。

第一个控制器:

[Route("param1/customer/{id}")] public IEnumerable<Order> GetOrdersByCustomer(int id) { ... }

第二控制器:

[Route("param2/customer/{id}")] public IEnumerable<Order> GetOrdersByCustomer(int id) { ... }

可在此处找到更多信息:Attribute Based WebAPI Routing

答案 1 :(得分:0)

删除RoutePrefix属性并在动作Route属性中设置第一个参数dynamic,如下例所示:

[HttpGet, Route("{myparam}/books/{bookId:int:min(1)}")]
public HttpResponseMessage Get(string myparam, int bookId)
{
...
}