我试图遵循许多使用多个正斜杠传递参数的网站使用的约定,而不是使用GET模型。
也就是说,我希望使用以下网址:
http://www.foo.bar/controller/action?arg1=a&arg2=b&arg3=c
以这种方式:
http://www.foo.bar/controller/action/a/b/c
我目前使用以下内容(大部分)工作:
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Sandbox",
url: "Sandbox/{action}/{*args}",
defaults: new { controller = "Sandbox", action = "Index", args = UrlParameter.Optional }
);
}
但是,如果我传入类似
的内容http://www.foo.bar/Sandbox/Index/a
或
http://www.foo.bar/Sandbox/Index/a/
适当地调用控制器和操作:
public ActionResult Index(string args)
{
return View();
}
但args为null。
但是,如果我传递的内容如下:
http://www.foo.bar.com/Sandbox/Index/a/b
然后根据需要,args是“a / b”。
我一直在搜索SO和网络的其余部分,但似乎无法找到解决方案。
我是否有一些明显的东西可以纠正这种行为?
我在寻找错误的术语吗?
注意:我能够使用Windows身份验证使用全新的ASP.NET应用程序重现此问题。所有这一切:
非常感谢任何帮助。谢谢! 类似的问题,但对我没有帮助:URLs with slash in parameter?
答案 0 :(得分:3)
没关系......这是问题......
MapRoute首先调用默认路由。 为了解决这个问题,我只是将默认地图路线与沙盒路线交换。
我希望这有助于某人。
工作解决方案:
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Sandbox",
url: "Sandbox/{action}/{*args}",
defaults: new { controller = "Sandbox", action = "Index", args = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}