Asp.Net MVC에서 "홈페이지"설정


105

asp.net MVC에서 "홈페이지"(예 : www.foo.com을 누를 때 표시되는 경로)는 Home / Index로 설정됩니다.

  • 이 값은 어디에 저장됩니까?
  • "홈페이지"는 어떻게 변경합니까?
  • 홈 컨트롤러의 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

3
MVC 5에서 양식 로그인이있는 경우 홈 페이지에서 로그인을 클릭하면 경로에 지정된 사용자 지정 컨트롤러가 아닌 홈 컨트롤러로 리디렉션됩니다. 등록 작업도 비슷한 작업을 수행합니다. 따라서 routeconfig를 변경하는 것 외에도 RedirectionToAction ( "Index", "Home")을 호출하는 일부 코드를 변경하고 자신의 컨트롤러 및 작업 이름으로 교체해야합니다.
anIBMer 2014

다중 경로를 가질 수 있다는 점을 지적 할 가치가 있습니다 . 이것은 BLANK URL 매개 변수를 사용하는 기본값이 될 수 있지만 url: "{controller}/{action}/{id}". 경로에 다른 이름을 지정하십시오.
Jess

이 답변이 도움이 될 수 있지만 여러 경로가 필요한 경우 여기를 참조하십시오. stackoverflow.com/a/8470531/1804678
Jess

1
이 답변은 MVC 3 및 ​​이전 버전에만 적합합니다. 권장되는 MVC 4 이상 접근 방식에 대해서는 아래 내 대답을 참조하십시오.
JTW

19

ASP.NET Core

라우팅은 클래스 의 Configure방법으로 구성됩니다 Startup. "홈페이지"를 설정하려면 다음을 추가하면됩니다. 이렇게하면 사용자가 사이트의 기본 URL로 이동할 때 MapRoute 메서드에 정의 된 작업과 컨트롤러로 라우팅됩니다. 즉, yoursite.com은 사용자를 yoursite.com/foo/index로 라우팅합니다.

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

ASP.NET Core 이전

아래와 같이 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 }
        );
    }
}

3

global.asax.cs의 RegisterRoutes 메서드를 확인하십시오. 경로 구성의 기본 위치입니다.


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예상되는 기본 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액션이 ExampleControllerurl에 매핑됩니다 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를 만듭니다. 인덱스 작업에서 한 줄 리디렉션을 작성했습니다.

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 }
        );

당신은 아마 기본 경로 생성, 컨트롤러의 이름을 생략 "컨트롤러"말씀을 잊었
amarax

0

라우터를 변경하지 않으려면 HomeController로 이동하여 다음과 같이 색인에서 MyNewViewHere를 변경하십시오.

    public ActionResult Index()
    {
        return View("MyNewViewHere");
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.