0

私は VWD Express 2010 で ASP.net MVC4 を使用しています。例としてここここ/Home/で提案されているように、余分なルートを URL から削除するように設定しました。私はそれらを正しい順序で配置するようにしました:

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

        routes.MapRoute(
            name: "Home",
            url: "{action}",
            defaults: new { controller = "Home", action = "Index" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }

これは、削除に関する限り機能し/Home/ますが、デフォルト以外のコントローラーにアクセスしようとすると 404 が発生します。

Server Error in '/' Application.

The resource cannot be found.

Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /LogItem/

デフォルト以外のものを削除すると、再び正常に動作するため、ルートまで追跡しました。ただし、何が間違っているのかわかりません。他の回答とドキュメントを理解することで、これはうまくいくはずです。

編集:私の説明からは明らかではないので、 など/About/の代わりにリンクできるように「ホーム」ルートを追加しました/Home/About。これは、グーグルで見つけた提案された解決策でした。HomeController私は基本的に、短縮 URL ( /{action}) で実装されたアクションと、完全に追加した他のコントローラー( /{controller}/{action}/{optional id})を一致させたいと考えています。

4

1 に答える 1

0

ルートは先着順で評価されます。「ホーム」ルートは基本的に「セグメントが 1 つしかない URL が表示された場合は、それを取得して処理し、そのセグメントがアクションであると想定します。その場合、登録した 2 番目のルートには機会がありません。リクエストを処理します。

例として特定のエラーを使用すると、「/LogItem」を要求しています。Home ルートが起動し、「LogItem」をアクションの名前として解析し、それをデフォルト コントローラーに渡します。そのコントローラーには LogIn アクションがない可能性があるため、404 がスローされます。

解決策の 1 つは、ルートの順序を変更することです。しかし、それでも、2 つ目も 1 つのセグメントを持つ URL を処理しますが、そのセグメントをコントローラとして解釈するため、これら 2 つが重複しています。次のルートに処理を渡すのではなく、デフォルトのアクション (インデックス) を実行します。

なぜ最初のルートが必要なのですか?何を達成しようとしていますか?より多くのコンテキストを提供すると、これらのルートを実装する方法を見つけることができます。

于 2013-10-24T11:50:23.517 に答える