2012-12-21 14 views
5

Neden rota yolu http://localhost:2222/2012-adidas-spring-classic/37, aşağıdaki yol eşleşmesi tarafından alınamıyor? 404 hatası alıyorum.Route Constraint ASP.NET MVC için çalışmaz

 public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("{*vti_inf}", new { vti_inf = @"(.*/)?_vti_inf.html(/.*)?" }); 
      routes.IgnoreRoute("{*vti_rpc}", new { vti_rpc = @"(.*/)?_vti_rpc(/.*)?" }); 

      #region API 

      routes.MapRouteLowercase(
      "NamedHomeEvent", 
      "{year}-{name}/{Id}", 
      new { controller = "Event", action = "Index", year = DateTime.Now.Year }, 
      new { year = @"\d{4}", Id = @"\d+" } 
      ); 



    public virtual ActionResult Index(int? id, int? year, string name) 
     { 
+0

da kullanabilirsiniz http://getglimpse.com/ ayıklama yollarına (ve çok daha fazla) (http://getglimpse.com/Help/Plugin/Routes) – robasta

cevap

4

Yönlendirme altyapısı burada size yardımcı olamaz. Bu durumda işlemek için özel bir rota yazabilirsiniz:

public class MyRoute : Route 
{ 
    public MyRoute() 
     : base(
      "{year-name}/{id}", 
      new RouteValueDictionary(new { controller = "Event", action = "Index", id = UrlParameter.Optional }), 
      new RouteValueDictionary(new { id = @"\d*" }), 
      new MvcRouteHandler() 
     ) 
    { 
    } 

    public override RouteData GetRouteData(HttpContextBase httpContext) 
    { 
     var routeData = base.GetRouteData(httpContext); 
     if (routeData == null) 
     { 
      return null; 
     } 

     var yearName = (string)routeData.Values["year-name"]; 
     if (string.IsNullOrWhiteSpace(yearName)) 
     { 
      return null; 
     } 

     var parts = yearName.Split(new[] { '-' }, 2, StringSplitOptions.RemoveEmptyEntries); 
     if (parts.Length < 2) 
     { 
      return null; 
     } 

     var year = parts.First(); 
     int yearValue; 
     if (!int.TryParse(year, out yearValue)) 
     { 
      return null; 
     } 

     var name = parts.Last(); 

     routeData.Values.Add("year", year); 
     routeData.Values.Add("name", name); 

     return routeData; 
    } 
} 

ve sonra bu yolu kayıt:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("{*vti_inf}", new { vti_inf = @"(.*/)?_vti_inf.html(/.*)?" }); 
    routes.IgnoreRoute("{*vti_rpc}", new { vti_rpc = @"(.*/)?_vti_rpc(/.*)?" }); 

    routes.Add("NamedHomeEvent", new MyRoute()); 
} 
+0

Bunun T4MVC ile çalışmayacağını düşünüyorum. –