使用可选的URL参数映射ASP.NET MVC路由的问题

时间:2010-09-06 17:32:45

标签: asp.net-mvc-2 asp.net-mvc-routing

routes.MapRoute("Archive.CityState",
              "Archive/{City}/{State}/{OP1}/{OP2}",
               new { controller = "Archive", action = "CityState", OP1 = UrlParameter.Optional, OP2 = UrlParameter.Optional },
               new { City="[a-zA-Z]+" ,State = @"[a-zA-Z]{2}", OP1 = @"[a-zA-Z]+" , OP2 =@"\d{4}" });


public ActionResult CityState(string City, string State, string OP1, int OP2)
        {
            var x = City; 
            var y = State;
            var OptionalParameter1= OP1;
            var OptionalParameter2 = OP2;
            return View();
        }

这可以映射
存档/雷蒙/ WA /化学

存档/雷蒙/ WA /化学/ 2010

但不是

存档/雷蒙/ WA

有人可以帮忙吗?感谢。

1 个答案:

答案 0 :(得分:0)

这些限制使其无法匹配您想要的内容:

OP1 = @"[a-zA-Z]+", 
OP2 = @"\d{4}"

因为两个参数都是必需的。如果希望此路由能够与Archive/Remond/WA匹配,请修改正则表达式以接受空值。还要记住,只有 last 参数可以是可选的(你不能有两个连续的可选参数,因为这没有意义)。