带有通配符的路由

时间:2014-03-08 09:04:11

标签: asp.net-mvc-4 asp.net-mvc-routing

我想为API进行路由,版本化。

文件夹结构就像这样

/api/v1-0/ApiController.cs
/api/v1-1/ApiController.cs
/api/v1-2/ApiController.cs

所以我添加了路线

    routes.MapRoute(
        name: "DefaultApiVersioned",
        url: "api/v{*Version}/{controller}/{action}/{id}",
        defaults: new { controller = "Api", action = "Index", id = UrlParameter.Optional }
    );

但是当添加路线时,我得到一个“ArgumentException”。异常消息是:

"Ein Pfadsegment, das mehrere Abschnitte enthält, z.B. einen Literalabschnitt oder einen Parameter, darf keinen Catchall-Parameter enthalten. "

翻译:

"A path segment, that has multiple sections, such as a literal section or a parameter, can not have a catchall parameter"

那么我该如何更改我的路线配置?

1 个答案:

答案 0 :(得分:8)

您不需要通配符:

routes.MapRoute(
    name: "DefaultApiVersioned",
    url: "api/v{version}/{controller}/{action}/{id}",
    defaults: new { controller = "Api", action = "Index", id = UrlParameter.Optional }
);

通配符只能用作路径定义的最后一段。