ASP.MVC 4 -使用第一个QueryString参数&添加到Url中的Action

本文关键字:添加 Url Action 中的 参数 QueryString MVC 第一个 ASP | 更新日期: 2023-09-27 18:11:14

如果可能的话,我想整理一下这个url。

目前它看起来像这样从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 }
                );

谢谢!

ASP.MVC 4 -使用第一个QueryString参数&添加到Url中的Action

您几乎完成了路由更改。在默认路由

之前添加以下代码
routes.MapRoute(
    "CityRoute",
    "{controller}/{action}/{City}",
    new { controller = "House", action = "Location" }
);

注意,我稍微改变了url格式,并删除了可选参数部分(它是不需要的)

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

        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参数。

要在MVC 4中获得url,您有两个选项

  1. city参数映射路由:

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

(MVC 5引入了RouteAttribute类,它允许你在单个动作上指定映射)