3

デフォルトでは、MVC 4 アプリケーションには次のルートがありますProjectFolder\App_Start\RoutConfig.cs

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

ブラウザで を呼び出すと、http://host:port/controller/が表示されhttp://host:port/controller/Indexます。

ここで、スタート ページを変更したい場合は、次のSomeController\MyActionように変更できます。

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

しかし、その後http://host:port/controller/は表示されずhttp://host:port/controller/Index、404 エラー ページが表示されます。/IndexURLに明示的に追加する必要があります。

プロジェクト プロパティからスタートアップ ページを変更し、Home\Index へのルートを維持すると、URL ルートhttp://host:port/にスタートアップ ページが表示されないことを除いて、すべて正常に機能します。アプリケーションを実行すると、URL にスタートアップ ページ名が追加されます。ただし、アプリケーションのどこかに相対ハイパーリンクが<a href="/" title="home">Home</a>ある場合、目的のホームページに移動できません。

スタートアップ ページ「SomeController\MyAction」を次のように構成する方法はありますか。ルート URL は常にそれを指しIndex、すべてのコントローラーのデフォルト ビューになりますか?

Ruby on Rails のルートに相当するもの:

root :to => "some_controller#my_action"

これにより、デフォルトのビューがアクションにバインドされたままになりますindex

4

2 に答える 2

2

あなたはこれが欲しいようです:

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

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

これは、次のように、デフォルトのルーティングがどのように機能するかですASP.NET Web API

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);
于 2013-09-07T02:08:18.220 に答える