5

system.web.routing(残念ながら、companyという物理ファイルが存在しないexample.com/about/companyのようなURLを作成するcmsを使用して)にルーティングするルートテーブルにルートを作成しようとしています。 iisの書き換え/ルーティングは使用できません)。次のことを試しましたが、結果は404になります。別の物理ファイルをポイントする場合(テスト目的)、ルーティングは正常に機能します。

void RegisterRoutes(RouteCollection routes)
{
    routes.RouteExistingFiles = true;
    routes.MapPageRoute("about", "about/us", "~/about/company", false);
}

それで、そのようなアイテムを指すことは可能ですか?

4

3 に答える 3

1

MapPageRouteでは目的の目標を達成することはできません。MapPageRouteは、PageRouteHandlerを使用して新しいルートを作成することで機能します。PageRouteHandlerクラスのドキュメントには、具体的に次のように記載されています。

物理ファイルのURLをマップするために、PageRouteHandlerのインスタンスをRouteコンストラクターに渡します。PageRouteHandlerオブジェクトは、物理ファイルの仮想パスを指定し、物理URLの承認ルールをチェックするかどうかを決定します。

これがMVCアプリケーションの場合、RouteCollectionExtensionsクラスにルーティング用の拡張機能があります。このMapRouteメソッドを使用して、次のようにMvcRouteHandlerを使用して新しいルートを作成するために必要なデフォルトパラメーターをフィードできるはずです。

routes.MapRoute("about", "about/us", new { controller = "about", action="company", id="" });

コントローラの設計がわからないので、適切な値を入力する必要があります。また、カスタムルートの作成(C#)も参照してください。これは、MVCがルーティングを処理する方法を理解するのに役立つ場合があります。

これがMVCアプリでない場合は、UrlRoutingHandlerクラスから派生したカスタムルートハンドラーを実装し、RouteCollectionに新しいルートを追加する必要があります。

于 2012-07-27T17:45:19.090 に答える
1

のように拡張機能のないターゲットにルーティングするに/content/somethingは、IISアプリケーションプールで統合モードを使用する必要があります。これを変更できない場合は、カスタム404ハンドラーを設定し、そこからURLを手動で処理する以外に、必要な操作を簡単に行う方法はありません。これが404エラーの原因である可能性があります。

また、RouteExistingFilesおそらく間違っているはずです。ファイルとして存在しないものをルーティングしようとしています。設定RouteExistingFiles = trueすると、ルートが一致する場合、存在するファイルのデフォルトの処理は使用されません。あなたがしたいのは、存在しないがデータベースからのコンテンツを表すパスを処理することだけですよね?したがって、これは誤りのままにしておきます。

最後に、あなたのMapPageRoute声明は正しくないようです。たとえば、Microsoftのウォークスルーでは、次のようになります。http: //msdn.microsoft.com/en-us/library/dd329551.aspx

routes.MapPageRoute("SalesRoute",
    "SalesReport/{locale}/{year}",
    "~/sales.aspx");

これにより、一致するルートがsales.aspx応答で呼び出されます。この例では、ターゲットは~/about/company実際のターゲットではなくルートのように見えます。CMSリクエストを処理する実際のターゲットにはaspx拡張子が必要です。

于 2012-07-28T04:29:44.160 に答える
1

これがお役に立てば幸いです。この特定の例はSitecoreの場合ですが、プロジェクトはオープンソースであり、ソリューションに必要なパーツを再利用することはそれほど難しくないと思います。

このプロジェクトの要点は、MVCルーティングエンジンをWebフォームソリューションで使用できるようにすることです。コードを少し掘り下げる必要がある洞窟を追加しますが、うまくいけば正しい軌道に乗ることができます。

https://github.com/Sitecore/Sitecore-Mvc-Routing

于 2012-07-30T09:16:47.530 に答える