MVC路由:“多个动作ID

时间:2012-06-14 15:42:10

标签: asp.net-mvc model-view-controller asp.net-mvc-routing

我的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 }
        );

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

雅'知道。这些路线看起来像一个简单的东西,但是当你开始它时,这是一个神秘的,如RegEx的!!!!

有什么想法?

1 个答案:

答案 0 :(得分:1)

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

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

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

public ActionResult CountryCodes(string countryCode)
{
    // do whatever you please
}