2009-08-05 22 views
1

null参照例外を防ぐために、コントローラのURL制約をいくつか作成しようとしています。例えば数値IDのURL制約

/フォルダ/編集/ 3大丈夫でなければなりません

/フォルダ/編集/空自は大丈夫

代わりに、すべてのアクションメソッドで正規表現を追加するのであってはならない私がしたい URL制約を使用します。

私が今直面している問題は、既定のルートがすべての要求をキャッチしているか、既定のルートにその制約を追加している場合、http://host.tld/のような標準要求がもう機能していないことです。

私が追加しようとしている制約がある

routes.MapRoute(
    "RouteWithContraint", 
    "folder/edit/{id}", 
    new { controller="folder", action="edit", id="" }, 
    new { id = @"\d+" } 
); 

誰もがその問題を解決する方法についての私のためのヒントを持っていますか?または、誰かがIDの "IsANumber"チェックのDRYに関するベストプラクティスを知っていますか?

よろしく、

ゴードン

答えて

1

いくつかのアクションおよび/またはコントローラの種類をチェックするためのカスタムActionFilterAttributeを作成する方法は? ActionFilterAttributeから継承したクラスのOnActionExecutingメソッドの例:

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if (filterContext.RouteData.Values["action"] == "edit" && !IsProperTypeofId()) 
     RedirectToRoute(filterContext, new { controller = "General", action = "Error", id = 401 }); 

     base.OnActionExecuting(filterContext); 
    } 
+0

元のアプローチ+1:) しかし、私は圧倒していると思いますが、どう思いますか? おそらくルートで直接できることがあります。 – SDReyes

+0

これは簡単な解決方法です。ルーティング機能などを拡張している可能性があります。 –

1

ルートが追加される順序は重要です。リクエストが到着すると、ルートが順番にチェックされ、一致するものが見つけられます。したがって、ルートを最も具体的なものから最も具体性の低いものにする必要があります。

すでに試したことがあるかもしれませんが、カスタムルートをデフォルトルートのより前に追加すると、運が増えますか?

+0

このソリューションをテストしましたランドルフ? :O – SDReyes