如果可能的话,我想整理这个网址。
看起来它似乎是从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 }
);
谢谢!
答案 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 }
);
至少,现在您可以在控制器方法中获得GeoLat
和GeoLong
值,以及City
parametr。
答案 2 :(得分:1)
要获得你在MVC 4中获得的网址,你有两个选择
使用city
参数映射路线:
routes.MapRoute(
"City",
"{controller}/{action}/{city}",
new { controller = "House", action = "Location", city = UrlParameter.Optional }
);
将city
param重命名为id
并使用默认路由映射。
(MVC 5引入了RouteAttribute类,允许您指定各个Actions的映射。)