Asp.net mvc 4 带有通配符的路由

Asp.net mvc 4 带有通配符的路由,asp.net-mvc-4,asp.net-mvc-routing,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}", defaul

我想为一个已版本化的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
”。例外消息是:

“在Pfadsegment中,作为一个完整的参数,z.B.是一个完整的参数,是一个完整的参数。”

翻译:

“具有多个节(如文字节或参数)的路径段不能具有catchall参数”


那么,如何更改路由配置?

您不需要通配符:

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

通配符只能用作管线定义的最后一段。

您不需要通配符:

routes.MapRoute(
    name: "DefaultApiVersioned",
    url: "api/v{version}/{controller}/{action}/{id}",
    defaults: new { controller = "Api", action = "Index", id = UrlParameter.Optional }
);
通配符只能用作管线定义的最后一段