URLがルートに一致するが、そのルートへのパラメータが間違っていることを検出するルートを作成するにはどうすればよいですか?スペルの間違ったURLのASP.NET MVCルート処理?
私は、ユーザーがURLを入力ミスしており、ルートテーブルは非常に優雅にこれらのスペルミスを処理しないので、デバッグが困難であった、最近いくつかの例持っていた:このルートは/ URL /ウィジェットを扱う
を
routes.MapRestfulRoute(
"WidgetsItem",
"Widgets/{idString}",
new { controller = "Widgets", action = "Item" },
new { idString =
@"^[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}$"}
);
routes.MapRoute("WidgetsList", "Widgets", new { controller = "Widgets", action = "List" });
routes.MapRestfulRoute("CatchAll","{*url}", new {controller = "Error", action = "Http404"});
をGUIDとユーザーが正しい見えますが(ただし、GUIDで唯一の28文字があります)されていない25246810-4b60-4db8-8567-8db8826/URL /ウィジェットに入りました。
URLがルートと一致しなかったため、応答は404でした。しかし、これは誤解を招き、デバッグの問題を引き起こしました。ウィジェット/アイテムアクションが404を返すように見えます。実際にはアクションが呼び出されていないときに、そのアクションには間違っていました。私がRouteDebuggerをインストールするまでは、guidの形式が間違っていたことに気づいた。
URLが実際にルートと一致するが、そのルートへのパラメータが間違っていることを検出する別のエラールートを作成するにはどうすればよいですか?
EDIT:I /ウィジェット/何も一致する新しいルートを追加すると、通常のルートの後にそのルートを置くことによって、それを「修正」することができます
routes.MapRestfulRoute(
"WidgetsItemError",
"Widgets/{idString}",
new { controller = "Widgets", action = "Item" },
new { idString = @"^.+$" } // match if it has any param at all
);
しかし、これは非常に非効率的であると思われる - 私は意志/ Foo、/ Bar/FooBarなどのすべての単一のルートに対して同様のエラールートを追加する必要があります(ルートがかなりあります)。これを行うためのより一般的な方法はありませんか?
ルートの制約により、アプリケーションのパフォーマンスが低下することがあります。 – Paul
これをサポートするためのディスカッションへのリンクはありますか?/Widgets/guid(1つのアイテムを返す)と/ Widgets(リストを返す)を区別できる方法はありますか? –
なぜユーザーは手動でGUIDを入力していますか?それは非常にエラーが発生しやすいです。 – RickAndMSFT