3

アクションなしでルートを作成することは可能ですか?

私はこのデフォルトルートを持っています:

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

しかし、私は次のようなURLも必要です。http://mysite/bar/1234ここ1234で、IDbarコントローラーです。

そこで、次のルートを作成しました。

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

しかし、に移動するhttp://mysite/bar/1234と、リソースが見つからないと表示されました。2番目のルートで何を間違えましたか?

4

2 に答える 2

5
routes.MapRoute(
  name:        "BarRoute",
  url:         "{controller}/{id}",
  defaults:    new { controller = "Bar", action = "Index" },
  constraints: new { id = @"\d+" }
);

より一般的なルートの前に、ルートを適切な場所に配置する必要があることを考慮する必要があります。たとえば、次のようになります。

routes.MapRoute(
           name: "BarRoute",
routes.MapRoute(
           name: "Default",
于 2012-11-28T22:01:19.830 に答える
3

制約なしで次の 2 つのルートをこの順序で持つことはできません

  • {controller}/{action}/{id}
  • {controller}/{id}

これらの 2 つのルートは互換性がありません。にアクセスしようとするhttp://mysite/bar/1234と、ルーティング エンジンがルートを分析し/bar/1234、最初のルートと一致します。コントローラーでアクションが呼び出さ1234れていないと思うことを除いて。Bar

したがって、このセットアップを機能させたい場合は、いくつかを指定する必要がありますconstraints。また、ルートは定義した順序で解決されるため、ルート定義の順序が重要であることを忘れないでください。そのため、より具体的なルートを上部に配置してください。

于 2012-11-28T21:59:26.593 に答える