20

次のルートが定義されています。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(name: "Homepage", url: "", defaults: new { controller = "Restaurants", action = "Search" });
    routes.MapRoute(name: "About", url: "about", defaults: new { controller = "Home", action = "About" });
    routes.MapRoute(name: "Disclaimer", url: "disclaimer", defaults: new { controller = "Home", action = "Disclaimer" });
    routes.MapRoute(name: "Contact", url: "contact", defaults: new { controller = "Home", action = "Contact" });
    routes.MapRoute(name: "RestaurantDetails", url: "{id}/{slug}", defaults: new { controller = "Restaurant", action = "Details" });
    routes.MapRoute(name: "RestaurantLocationDetails", url: "{id}/{restaurantSlug}/{locationSlug}", defaults: new { controller = "Restaurant", action = "LocationDetails" });
    routes.MapRoute(name: "Api", url: "api/{action}", defaults: new { controller = "Api" });
}

404 を返すルートがいくつか見つかったので、RouteDebugger NuGet パッケージをインストールしました。

それは最初の 4 つのルートに期待することを示していますが、最後の 3 つのルートではまだ 404 が表示され、悲しいことに Route Debugger がページの下部に表示されません。マップされたビットが表示されることを望んでいましたが、私は何も得ません。すべてのビューが存在します。

だから私はルート定義を間違えていると思っています - 誰でもこれに光を当てることができますか? また、Route Debugger を使用して、404 を返すページのルート ディクショナリに URL がどのようにマップされるかを表示するにはどうすればよいですか?

4

1 に答える 1

22

ルートの順序を変更する必要があります。

routes.MapRoute(name: "Homepage", url: "", defaults: new { controller = "Restaurants", action = "Search" });
routes.MapRoute(name: "About", url: "about", defaults: new { controller = "Home", action = "About" });
routes.MapRoute(name: "Disclaimer", url: "disclaimer", defaults: new { controller = "Home", action = "Disclaimer" });
routes.MapRoute(name: "Contact", url: "contact", defaults: new { controller = "Home", action = "Contact" });
routes.MapRoute(name: "Api", url: "api/{action}", defaults: new { controller = "Api" });
routes.MapRoute(name: "RestaurantLocationDetails", url: "{id}/{restaurantSlug}/{locationSlug}", defaults: new { controller = "Restaurant", action = "LocationDetails" });
routes.MapRoute(name: "RestaurantDetails", url: "{id}/{slug}", defaults: new { controller = "Restaurant", action = "Details" });

ルートは、ルート リストに追加された順序で処理されます。

例:ルート URL パラメーターにはパラメーターが 2 つしかないためapi/action、ルートにも一致します。RestaurantDetails

したがって、特定のものから一般的なものへと移行する必要があります。一般に、2 つのルート定義に同じ数のパラメータがある場合、最初に追加されたルートが選択されます。

于 2011-05-07T00:42:31.423 に答える