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 }
);
谢谢!
您几乎完成了路由更改。在默认路由
之前添加以下代码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 }
);
至少,现在您将能够在控制器方法中实现GeoLat
和GeoLong
值,以及City
参数。
要在MVC 4中获得url,您有两个选项
-
用
city
参数映射路由:routes.MapRoute( "City", "{controller}/{action}/{city}", new { controller = "House", action = "Location", city = UrlParameter.Optional } );
-
将
city
参数重命名为id
,使用默认路由映射
(MVC 5引入了RouteAttribute类,它允许你在单个动作上指定映射)