Asp.Net MVCで「ホームページ」を設定する


105

asp.net MVCでは、「ホームページ」(つまり、www.foo.comを押したときに表示されるルート)がHome / Indexに設定されています。

  • この値はどこに保存されますか?
  • 「ホームページ」の変更方法は?
  • ホームコントローラーのインデックスアクションでRedirectToRoute()を使用するよりもエレガントなものはありますか?

プロジェクトでHome / Indexのgreppingを試みましたが、参照が見つからず、IISでも何も表示されませんでした(6)。ルートのdefault.aspxページを確認しましたが、関連することは何もないようです。

ありがとう

回答:


150

Default.aspx/Default.aspx.csとGlobal.asax.csを見てください。

デフォルトルートを設定できます。

        routes.MapRoute(
            "Default", // Route name
            "",        // URL with parameters
            new { controller = "Home", action = "Index"}  // Parameter defaults
        );

コントローラー/アクションの名前を希望するデフォルトに変更するだけです。これがルーティングテーブルの最後のルートである必要があります。


6
@NikolaiDanteは、私がほとんどそれを逃したので、このコメントよりも速いので、コメントを回答にする必要があります。:)ありがとう
GazB 2013年

3
MVC 5.では、フォームログインがある場合、ホームページで[ログイン]をクリックすると、ルートで指定されたカスタムコントローラーではなく、ホームコントローラーにリダイレクトされます。登録アクションも同様のことを行います。したがって、routeconfigの変更とは別に、RedirectionToAction( "Index"、 "Home")を呼び出すコードも変更し、独自のコントローラーとアクション名に置き換える必要があります。
IBMer、2014年

複数のルートを持つことができることを指摘する価値があります。これは空白のURLパラメータを使用したデフォルトになる可能性がありますが、のような2番目のルートが必要になる可能性がありますurl: "{controller}/{action}/{id}"。ルートに異なる名前を付けるだけです。
Jess

この回答はうまくいくかもしれませんが、複数のルートが必要な場合は、こちらをご覧ください。stackoverflow.com/ a / 8470531/1804678
Jess

1
この回答は、MVC 3以前にのみ適しています。推奨されるMVC 4以降のアプローチについては、以下の私の回答を参照してください。
JTW 2016

19

ASP.NET Core

ルーティングはConfigureStartupクラスのメソッドで構成されます。「ホームページ」を設定するには、以下を追加するだけです。これにより、ユーザーがサイトのベースURLに移動したとき、つまり、yoursite.comがユーザーをyoursite.com/foo/indexにルーティングするときに、ユーザーはMapRouteメソッドで定義されたコントローラーとアクションにルーティングされます。

app.UseMvc(routes =>
{
   routes.MapRoute(
   name: "default",
   template: "{controller=FooController}/{action=Index}/{id?}");
});

ASP.NET以前のコア

以下に示すように、App_Start / RouteConfig.cs(MVC 3および4)またはGlobal.asax.cs(MVC 1および2)にあるRegisterRoutesメソッドを使用します。これにより、ユーザーがサイトのベースURLに移動した場合、ユーザーはMapRouteメソッドで定義されたコントローラーとアクションにルーティングされます。つまり、yoursite.comはユーザーをyoursite.com/foo/indexにルーティングします。

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

    // Here I have created a custom "Default" route that will route users to the "YourAction" method within the "FooController" controller.
    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "FooController", action = "Index", id = UrlParameter.Optional }
    );
}

5

ステップ1:ソリューションのGlobal.asaxファイルをクリックします。

ステップ2:次に定義に移動

RouteConfig.RegisterRoutes(RouteTable.Routes);

ステップ3:コントローラー名とビュー名を変更する

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

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

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

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


2

MVC 5の属性ルーティング

MVC 5以前routes.MapRoute(...)は、RouteConfig.csファイルを呼び出すことで、URLを特定のアクションとコントローラーにマッピングできました。ここにホームページのURLが保存されます(Home/Index)。ただし、次のようにデフォルトルートを変更すると、

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

これは他のアクションとコントローラーのURLに影響することに注意してください。たとえば、という名前のコントローラークラスがExampleControllerあり、その中にアクションメソッドが呼び出さDoSomethingれた場合、予期されるデフォルトのURLExampleController/DoSomething、デフォルトルートが変更されたため、は機能しなくなります。

これの回避策は、デフォルトのルートをいじらないで、RouteConfig.csファイルに新しいルートを作成して、他のアクションやそのようなコントローラーのために、

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

これDoSomethingで、ExampleControllerクラスのアクションがurlにマップされhey/nowます。しかし、これは、さまざまなアクションのルートを定義するたびに行うのが面倒になる可能性があります。MVC 5では、URLをそのようなアクションに一致させる属性を追加できるようになりました。

public class HomeController : Controller
{
    // url is now 'index/' instead of 'home/index'
    [Route("index")]
    public ActionResult Index()
    {
        return View();
    }
    // url is now 'create/new' instead of 'home/create'
    [Route("create/new")]
    public ActionResult Create()
    {
        return View();
    }
}

1

私は答えを試しましたが、うまくいきませんでした。これは私がやったことです:

新しいコントローラーDefaultControllerを作成します。インデックスアクションでは、1行のリダイレクトを記述しました。

return Redirect("~/Default.aspx")

RouteConfig.csで、ルートのcontroller = "Default"を変更します。

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

おそらく、コントローラの名前の「コントローラ」という単語を省略して、デフォルトルートを作成するのを忘れていたでしょう
アマラックス

0

ルーターを変更したくない場合は、HomeControllerに移動して、次のようにインデックスのMyNewViewHereを変更します。

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.