Asp.net MVCでは、「ホームページ」(つまり、www.foo.comにアクセスしたときに表示されるルート)がHome/Indexに設定されます。
プロジェクトでHome/Indexをgrepしようとしましたが、参照が見つからず、IIS(6)に何も表示されませんでした。ルートのdefault.aspxページを見ましたが、それは何の関連性もありませんでした。
ありがとう
Default.aspx/Default.aspx.cs
とGlobal.asax.csを見てください
デフォルトルートを設定できます。
routes.MapRoute(
"Default", // Route name
"", // URL with parameters
new { controller = "Home", action = "Index"} // Parameter defaults
);
Controller/Actionの名前を目的のデフォルトに変更するだけです。これがルーティングテーブルの最後のルートになります。
ルーティングは、Configure
クラスのStartup
メソッドで構成されます。 「ホームページ」を設定するには、以下を追加するだけです。これにより、ユーザーはサイトのベースURLに移動する場合、つまりMapRouteメソッドで定義されたコントローラーとアクションにルーティングされます。つまり、yoursite.comはユーザーをyoursite.com/foo/indexにルーティングします。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=FooController}/{action=Index}/{id?}");
});
以下に示すように、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 }
);
}
ステップ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 }
);
}
}
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 }
);
}
}
global.asax.csのRegisterRoutesメソッドを確認します-これはルート設定のデフォルトの場所です...
MVC 5より前は、RouteConfig.csファイルでroutes.MapRoute(...)
を呼び出すことにより、URLを特定のアクションおよびコントローラーにマップできました。これは、ホームページのURLが保存される場所です(Home/Index
)。ただし、以下に示すようにデフォルトルートを変更した場合、
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
これは、他のアクションとコントローラーのURLに影響することに注意してください。たとえば、ExampleController
という名前のコントローラクラスとその中のDoSomething
というアクションメソッドがある場合、デフォルトルートが変更されたため、予想されるデフォルトURL ExampleController/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();
}
}
答えを試しましたが、うまくいきませんでした。これは私がやったことです:
新しいコントローラー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 }
);
ルーターを変更したくない場合は、HomeControllerに移動して、インデックス内のMyNewViewHereを次のように変更します。
public ActionResult Index()
{
return View("MyNewViewHere");
}