3

ルーティングを使用するように変換したい既存のサイトがあります。ここでScottGuthrieの投稿を読んだ後、ほとんどの状況で機能する実用的なサンプルを作成しました。ただし、既存のサイトのすべてのページが特定のパターンに一致するわけではないため、データベースをチェックして、使用するルート(宛先.aspxページ)を決定する必要があります。

たとえば、ほとんどのページは次のようになります。

http://www.mysite.com/people/person.html

これは問題ありません。「people」ディレクトリがあるため、これらをview_person.aspxページに簡単にルーティングできます。

しかし、いくつかのページはこのようなものです:

http://www.mysite.com/category_page.html http://www.mysite.com/product_page.html

これには、データベースをチェックして、view_category.aspxページまたはview_product.aspxページのどちらにルーティングするかを確認する必要があります。 そして、これは私が立ち往生しているところです。 データベースをチェックしてルートを返すIRouteHandlerを作成しますか?それとももっと良い方法はありますか?私がその種類の適合を見つけた唯一のコードは、この質問への答えです。

前もって感謝します。

4

3 に答える 3

0

ルートハンドラはデータベースをチェックしません。すべてのリクエストをハンドラーの.aspxスクリプトに送信します。データベースをチェックするのはそのスクリプトです。

私の登録ルートは次のようになります...

    private static void RegisterRoutes()
    {
        Route currRoute = new Route("{resource}.axd/{*pathInfo}", 
                                    new StopRoutingHandler());
        RouteTable.Routes.Add( "IgnoreHandlers", currRoute);

        currRoute = new Route("{urlname}",
                            new EPCRouteHandler("~/Default.aspx"));
        currRoute.Defaults = new RouteValueDictionary {{"urlname", "index.html"}};
        RouteTable.Routes.Add( "Default", currRoute);
    }

カスタムハンドラーは、ASP.Net 4.0では必要ありませんが、urlnameパラメーターをURL変数として応答するスクリプトに渡すだけです。

これで、応答するスクリプトがデータベースをチェックする頻度は、データベース内のデータが変更される頻度によって異なります。たとえば、データが変更されたと想定される場合は、パスを簡単にキャッシュし、キャッシュを無効にすることができます。

于 2010-05-17T22:19:28.070 に答える
0

そうすることを気にしないのであれば、最もクリーンな解決策は次のとおりです。

http://www.mysite.com/pages/category_page.html

ASP.NET MVCでは、ルートルートで既定のコントローラーとアクションメソッドを指定することにより、この状況の処理方法が少し異なります。

于 2010-05-09T19:15:30.790 に答える
0

同じ状況で立ち往生している人のために、私はこの回答のコードをデータベースと照合して適切なASPXページを返すように調整することになりました。

于 2010-05-18T13:12:56.600 に答える