2011-02-14 69 views
17

我寫了一個自定義路由約束,但其過濾器不能被識別。有沒有人有IRouteConstraint工作用例的例子?如何使IRouteConstraint過濾器路由

此外,請注意開發人員:我得到雙重顯示在我的android形式。部分渲染必須有錯誤嗎?

+0

您是否嘗試過使用調試器設置你的過濾器中的斷點,看它是否被調用? – Eilon 2011-02-15 19:16:42

回答

22

這裏有一個簡單的約束查找文章塞在一個虛構的庫:

public class SlugRouteConstraint : IRouteConstraint 
{ 
    private readonly ISlugRepository slugRepository = new SlugRepository(); 

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) 
    { 
     if (!values.ContainsKey(parameterName)) 
      return false; 

     var slug = (string)values[parameterName]; 

     return slugRepository.Exists(slug); 
    } 
} 

你可以連線了約束這樣的:

routes.MapRoute("Slugs", "{slug}", 
    new { controller = "Articles", action = "View" }, 
    new { slug = new SlugConstraint() });