【问题标题】:MVC Routing : "Multiple action idsMVC 路由:“多个操作 id
【发布时间】:2012-06-14 15:42:10
【问题描述】:

我的 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 属性的第三段是可选的,这将是有意义的,但我的理解是,通过不将它括在大括号中,它使其成为目标中的 required 段网址。显然“http://localhost/api/countries”不包括“大陆”或“地区”,那么为什么它们会被识别为与请求匹配。

你知道的。这些路线看起来很简单,但当你真正理解它时,它就像 RegEx 一样神秘!!!

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢先生!这确实是问题所在!
    猜你喜欢
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多