0

我正在使用 Visual Studi0 2010。在我的WebApiConfig.cs文件中,我有以下配置,我可以映射这两个 url/Values/Values/1. 它工作正常。

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new {id= RouteParameter.Optional  } 
        );

因为我想要我的自定义 URL/Values/Machines/Values/Machines/100,所以我将上面的设置更改为下面。

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new {action="get", id= RouteParameter.Optional  } 
        );

它现在映射到下面的 url,除了这个,/Values/1. 请让我知道我错过了什么。

1./Values
2./Values/Machines
3./Values/Machines/100

谢谢。

4

1 回答 1

2

这是预期的行为。根据您的新路线,第一个参数Values应为控制器名称,第二个参数1应为动作,但您没有名称的动作1

为了到达 Action,您需要带有新路由的 url 应该是这样的:/Values/Index/1

你可以这样做:

routes.MapRoute(
    name: "IndexWithParam",
    url: "{controller}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    constraints: new { id = @"\d+" }
);

routes.MapRoute(
    name: "Default", // Route name
    url: "{controller}/{action}/{id}", // URL with parameters
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

在这种情况下,如果 Url 是这样的:/Values/1,它将到达第一个路由并将其重定向到/Values/Index/1。请注意,我在这条路线上设置了一个约束,以确保第二个参数是一个数字。

于 2012-12-27T17:09:52.920 回答