0

ASP.NET MVC v3 で回帰ルート処理を行う方法はありますか?

これが私のビジネスケースの例です。URL「www.mysite.com/faq/Index」が与えられた場合、コントローラー「FAQ」、アクション「Index」のルートが存在するかどうかを確認したいと思います

routes.MapRoute("Default","{controller}/{action}/{id}",
            new { id = UrlParameter.Optional });

それが解決できない場合、通常は 404 エラーがスローされます。代わりに、次のルートを使用したいと思います。

routes.MapRoute("Content", "Content/{*contentPath}", 
            new { controller = "Content", action = "RenderPageByURL" });

それが失敗した場合は、404 を返す必要があります。

カスタムエラーハンドラーを作成できると思っていましたが、これは面倒です。どこから始めるべきかについてのアイデアはありますか? それとも、これは本当に悪い考え(TM)なので、ビジネスに戻って、最初から正しい方法を使用するように伝えるべきですか? ありがとう。

編集します。明確にするために、単純な URL マッチングによってルートと一致するかどうかを確認しようとしているわけではありません。ルーティングが成功するかどうかを判断し、適切なコントローラーを見つけられるように、ルーティング メカニズムを十分に賢くしたいと考えています。

4

2 に答える 2

1

私は同僚の提案と以下のリンクに基づいて私の質問に答えています(ありがとう、ジョシュ!):

http://stephenwalther.com/archive/2008/08/07/asp-net-mvc-tip-30-create-custom-route-constraints.aspx

基本的に、ルートにカスタム制約を追加します。

 routes.MapRoute("Content", "{*contentPath}", 
        new { controller = "Content", action = "RenderPageByURL" }, 
        new { matchController = new ContentRouteConstraint() });

 routes.MapRoute("Default","{controller}/{action}/{id}",
        new { id = UrlParameter.Optional });

ContentRouteConstraint()はIRouteConstraintを実装し、既存のルートコントローラーの1つと一致しない場合にのみMatchメソッドでtrueを返します。MatchメソッドがContentRouteConstraint()で失敗した場合、次のルートにドロップダウンします。

これの良いところは、URLを生成しようとするときにこのルートを無視できることです(この場合はこれを実行します)。

于 2012-11-23T15:15:02.373 に答える
1

Globasl.asax.cs でContent以下のルートを定義します。Default

routes.MapRoute("Default","{controller}/{action}/{id}",
            new { id = UrlParameter.Optional });

routes.MapRoute("Content", "Content/{*contentPath}", 
            new { controller = "Content", action = "RenderPageByURL" });
于 2012-11-16T16:53:41.303 に答える