ASP.MVC 4 - 使用First QueryString参数&在Url中附加到操作

时间:2014-07-03 13:06:14

标签: c# asp.net asp.net-mvc asp.net-mvc-routing

如果可能的话,我想整理这个网址。

看起来它似乎是从ActionResult GET

返回的
http://localhost/Controller/Action?City=SomeCity&GeoLat=00.000&GeoLong=-0.00000494

这是我想要实现的目标

http://localhost/Controller/Action/SomeCity?GeoLat=00.000&GeoLong=-0.00000494

City参数不用于任何内容,因此手动将第一个url编辑到第二个url确实会返回正确的数据。

我甚至尝试将City变量附加到动作中,而不是非常理想。

routes.MapRoute(
                "Default",
                "{controller}/{action}-{City}/",
                new { controller = "House", action = "Location", City = UrlParameter.Optional }
                );

谢谢!

3 个答案:

答案 0 :(得分:1)

你几乎就在路线改变了。在默认路由之前添加此代码

routes.MapRoute(
    "CityRoute",
    "{controller}/{action}/{City}",
    new { controller = "House", action = "Location" }
);

请注意,我稍微更改了网址格式并删除了可选参数部分(不需要)

答案 1 :(得分:1)

正如我所理解的那样,这将是您的解决方案:

        routes.MapRoute(
            name: "City",
            url: "House/Location/{City}",
            defaults: new { controller = "House", action = "Location" }
        );

控制器:

[HttpGet]
public ActionResult Location(string City, string GeoLat, string GeoLong){  }

更重要的是 - 你必须在默认路线之前添加它:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );
至少

,现在您可以在控制器方法中获得GeoLatGeoLong值,以及City parametr。

答案 2 :(得分:1)

要获得你在MVC 4中获得的网址,你有两个选择

  1. 使用city参数映射路线:

    routes.MapRoute(
        "City",
        "{controller}/{action}/{city}",
        new { controller = "House", action = "Location", city = UrlParameter.Optional }
    );
    
  2. city param重命名为id并使用默认路由映射。

  3. (MVC 5引入了RouteAttribute类,允许您指定各个Actions的映射。)

相关问题