0

Webforms 4 プロジェクトがあり、URL ルーティングを使用しています

場合によっては、特定のルートが複数のパターンに一致することがあります。

ルーティング メカニズムは特定の順序で各パターンを試行し、最初の一致で停止するようです。(私が間違っている場合は修正してください)。選択したパターンのリソース (主に aspx ファイル) が存在しない場合は、404 エラー (リソースが存在しません) が発生します。

次に一致するパターンは既存のリソースにマップされますが、メカニズムはそれを試みません。

例 (MVC と同様の命名規則を使用)

routes.MapPageRoute("Action", "{controler}/{action}/{*pathInfo}", "~/Views/{controler}/{action}.aspx");
routes.MapPageRoute("Overview", "{controler}/{*pathInfo}", "~/Views/{controler}/Overview.aspx");

したがって、ファイル システムには /Views/Patient/Overview.aspx と /Views/Patient/Search.aspx があります。

ルート " /Patient " は 2 番目のパターンと一致し、" /Views/Patient/Overview.aspx "にマップされます。

ルート " /Patient/Search " は最初のパターンと一致し、" /Views/Patient/Search.aspx "にマップされます。

ルート " /Patient/Search/SomePathInfo " は最初のパターンに一致し、" /Views/Patient/Search.aspx " にマップされます( URL の "SomePathInfo" 部分を {*panthinfo} 部分として扱います)。

ここでの問題は、ルート「/Patient/SomePathInfo」が両方のパターンに一致することです。最初のものは "SomePathInfo" を {action} 部分として扱います (存在しない" /Views/Patient/SomePathInfo.aspx " を検索します)。2 つ目は、"SomePathInfo" を {*pathInfo} 部分として扱い、既存の " /Views/Patient/Overview.aspx " にマップします。

ただし、メカニズムは最初のファイルを試行しますが、SomePathInfo.aspx ファイルが見つからず、404 エラーがスローされます。

私の質問は、「既存のリソースが見つかるまで各パターンを試行するようにメカニズムに指示する方法はありますか? (または、より一般的には、何らかの条件が満たされるまで? [ここ: resource.exists]」!

4

1 に答える 1

0

上記の問題の回避策は、ルーティングの制約を使用し、{action} プレースホルダーに使用できる値の限定されたセットを定義することです。同じことが {controller} プレースホルダーなどにも当てはまります。

したがって、リスト内のアクションのみを受け入れる制約を定義します。「インデックス」、「詳細」、「追加」、「編集」、「選択」など、およびリスト内のコントローラー「ホーム」、「患者」、「インシデント」等;

routes.MapPageRoute("Action", "{controler}/{action}/{*queryValues}", "~/Views/{controler}/{action}.aspx", true,
            new RouteValueDictionary { // Default values
                { "controller", "home"},
                { "action", "index"} },
            new RouteValueDictionary { // constraints
                { "controller", "home|patient|incident"},
                { "action", "index|details|add|delete|edit|select"} });

そのようにして、「patient/somequery」のようなものを入力すると、「somequery」文字列はこのマッピングの制約を満たさないため、メカニズムは次のものに続き、「somequery」部分を {*queryvalues} として扱い、 {アクション}ではありません。

しかし、疑問は依然として残ります:

既存のリソースが見つかるまで各パターンを試行するメカニズムを指示する方法はありますか? (または、より一般的には、何らかの条件が満たされるまで? [ここでは: resource.exists]

于 2012-08-09T10:21:56.353 に答える