0

で定義されたルートがいくつかありますGlobal.asax.cs

routes.MapRoute(
        "Custom",
        "party/get/{a}~{b}",          
        new { controller = "party", action = "get" },
        new { a = @"\d+", b = @"\d+" }
);

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

リクエストが の場合、http://localhost:58684/party/get/37~12それは最初のルートと一致し、 と の値はそれぞれとaです。b3712

リクエストが次の場合http://localhost:58684/party/get/37~-12、最初のルートはこのリクエストに一致しません。これ-12は、制約@"\d+"に一致せず、デフォルト ルートがリクエストに一致するためです (この動作は望ましくありません)。

何らかの制約によりリクエストが 1 つのルートに一致しない場合、リクエストに一致する他の次のルートを回避するにはどうすればよいですか? 次のルートに制約を設定することに興味はありません。

4

2 に答える 2

0

ルートを使用できます。IgnoreRoute。

一例:

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
于 2012-10-17T17:11:56.987 に答える
0

ルーティング エンジンに、「このルートのすべてではなく一部に一致する場合、ルートを無視する」ように指示することはできません。ただし、別のルートを追加して不正なリクエストをキャッチし、エラー ページを表示したり、別のアクションにリダイレクトしたりすることはできます。

これを目的のルートの直後に追加すると、不要なリクエストをキャッチする必要があります。

routes.MapRoute(
    "BadPartyValue",
    "party/get/{badValue}",          
    new { controller = "party", action = "BadValue" }
);
于 2012-10-17T20:57:58.130 に答える