0

我的 MVC 路由有问题。

我正在尝试访问以下网址...“ http://localhost/api/Countries

我按以下顺序定义了以下路线...

    RouteTable.Routes.MapHttpRoute(
        name: "Continents",
        routeTemplate: "api/countries/Continents",
        defaults: new { controller = "countries", Action="Continents" }
        );
    RouteTable.Routes.MapHttpRoute(
        name: "CountryRegions",
        routeTemplate: "api/countries/Regions",
        defaults: new { controller = "countries", Action = "CountryRegions" }
        );

    RouteTable.Routes.MapHttpRoute(
        name: "CountryByCodeApi",
        routeTemplate: "api/{controller}/{countryCode}",
        defaults: new { controller="countries", countryCode = System.Web.Http.RouteParameter.Optional }
        );

每当我转到所需的 URL 时,我都会收到错误“找到与请求匹配的多个操作”。如果 routeTemplate 属性的第三段是可选的,这将是有意义的,但我的理解是,通过不将其括在大括号中,它使其成为目标 URL 中的必需段。显然“http://localhost/api/countries”不包括“大陆”或“地区”,那么为什么它们会被识别为与请求匹配。

你知道的。这些路线看起来很简单,但是当你开始使用它时,它就像 RegEx 一样神秘!!!

有什么想法吗?

4

1 回答 1

1

最后一个路由定义不通过路由定义提供动作名称,也不通过路由默认值提供它。如果路由定义应该省略它,则将其添加到默认值,如下所示:

routes.MapRoute(
    "CountryByCodeApi",
    "api/{controller}/{countryCode}",
    new {
        controller="countries",
        countryCode = RouteParameter.Optional,
        action = "CountryCodes"
    }
);

请注意,这只是最后一个路由定义。上层夫妇保持原样。

public ActionResult CountryCodes(string countryCode)
{
    // do whatever you please
}
于 2012-06-14T17:16:01.760 回答