2

私はルートに関するいくつかの問題を扱ってきました。ルートを定義しましたが、404 を取得し続けます。ルートは次のとおりです。

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

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

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

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

localhost:51081/login works! 
localhost:51081/Home/25.04.2013 works! 
localhost:51081/act doesnt work! 
localhost:51081/calendar/index doesnt work!

ここで、「login」と「home」は機能しますが、「calendar」と「act」は機能しません。「カレンダー」マッピングを一番上に移動すると、「ホーム」マッピングが機能しません。ページをどのようにマッピングしますか?

基本的に、URLにアクション名を表示したくない例:次のhttp://localhost:51081/Home/Home/25.04.2013.ように表示したいhttp://localhost:51081/Home/25.04.2013 or http://localhost:51081/calendar

4

3 に答える 3

3

@MarcGravellが言うように:例外に特別なルールを追加するだけです

あなたの場合、ルート Calendar と Home は同じです。{controller} をホームに置き換えることで、ルートをより具体的にマッピングできます。そのルートはそれほど動的ではなく、実際には例外です (アクションは無視されます)。

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

Act はカレンダーと同じなので、2 つのルートは必要ありません。Act だけでなく、Act/New を呼び出すだけです。

デフォルトで使用する場合:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}",
    defaults: new { controller = "Login", action = "Login" }
);

そして、コースから外れたルートの一番下に置きます。

于 2013-04-25T13:58:51.747 に答える
2
routes.MapRoute(
            name: "Default",
            url: "{controller}",
            defaults: new { controller = "Login", action = "Login" }
        );

/これは、とに一致するルートを定義し/anythingます。は/を使用しようとしLoginController.Login、を使用/anythingしようとしますanythingController.Login。このルートでは、 以外の「アクション」を取得することは決してできないことに注意してくださいLogin

それらをすべて捨てて、次のようなものを使用すると:

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

//anythingおよびのいずれかに一致します/anything/anythingelse

  • /にマップされますHomeController.Index
  • /anythingにマップされますanythingController.Index
  • /anything/anythingelseにマップされますanythingController.anythingelse

うまくいけば、デフォルトに関してマッピングがどのように機能するかが説明されます。

特定のルートがある場合は、このブランケット デフォルトの前に追加する必要があります。

于 2013-04-25T13:57:21.400 に答える