Como definir o controlador padrão no asp.net MVC 4 e MVC 5

106

Como defino o controlador padrão para meu projeto ASP.NET MVC 4 sem torná-lo HomeController ?

Como devo configurar uma área padrão quando o aplicativo é iniciado?

Adrian10 BEN
fonte
como mudaria de "/" para "/ home como página raiz? Este" / home "deve estar visível no navegador do cliente.
Andre Mesquita

Respostas:

165

a melhor maneira é mudar sua rota. A rota padrão (definida em seu App_Start) define/Home/Index

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);

como a página inicial padrão. Você pode alterá-lo para qualquer rota que desejar.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);
Dave Alperovich
fonte
13
No MVC 4, a rota padrão é definida no App_Start / RouteConfig.cs
Eric Labashosky
Muito verdadeiro. Atualmente estou trabalhando em projetos em ambos e ignoro essas coisas;)
Dave Alperovich
1
Dave está certo, mas gostaria de acrescentar que no MVC 4 o roteamento não é mais feito no Global.asax, mas sim no RouteConfig.cs em App_Start .
Bom Samaritano
2
Como fazer isso funcionar quando o controlador referenciado na rota padrão está em outra área (ou seja, não na raiz)?
superjos
você deve conseguir fazer a rota padrão ir para"AreaName/{controller}/{action}/{id}"
Dave Alperovich
30

Defina o código abaixo em RouteConfig.cs na pasta App_Start

public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
 routes.MapRoute(
 name: "Default",
 url: "{controller}/{action}/{id}",
 defaults: new { controller = "Account", action = "Login", id = UrlParameter.Optional });
}

SE ainda não estiver funcionando, siga as etapas abaixo

Segunda maneira: você simplesmente segue as etapas abaixo,

1) Clique com o botão direito no seu projeto

2) Selecione Propriedades

3) Selecione a opção Web e, em seguida, selecione a página específica (controlador / visualização) e, em seguida, defina sua página de login

Aqui, conta é meu controlador e login é meu método de ação (salvo no controlador de conta)

Por favor, dê uma olhada na insira a descrição da imagem aquicaptura de tela em anexo .

Nimesh
fonte
15
Sua "segunda maneira" é sobre o que acontece quando você depura seu projeto da web. Não tem nada a ver com o "controlador padrão", ou seja, qual página é exibida quando você navega para a página de destino do seu site.
Martin Liversage
25

Não vi esta pergunta respondida:

Como devo configurar uma área padrão quando o aplicativo é iniciado?

Então, aqui está como você pode configurar uma área padrão:

var route = routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    ).DataTokens = new RouteValueDictionary(new { area = "MyArea" });
Amna Ali
fonte
1
ótima pergunta, por que você não cria como um?
stuartdotnet
O que é uma 'área'? Se eu definir uma visualização, o layout referenciado é carregado e, em seguida, uma solicitação HTTP separada com meus dados de visualização? (isto é, operação Ajax separada) ou o layout é renderizado e envolvido em torno de minha visão?
Gus Crawford
2
@GusCrawford O que é uma 'área'? De msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : Para acomodar grandes projetos, a ASP.NET MVC permite particionar aplicativos da Web em unidades menores que são chamadas de áreas. As áreas fornecem uma maneira de separar um grande aplicativo da Web MVC em agrupamentos funcionais menores. Uma área é efetivamente uma estrutura MVC dentro de um aplicativo. Um aplicativo pode conter várias estruturas MVC (áreas).
Amna Ali
Quanto à outra pergunta, não acho que esteja relacionada a esta resposta, e não parece relevante nem mesmo para a pergunta original. Pode ser, você deve publicá-lo em outro lugar.
Amna Ali
Vou perguntar separadamente em uma nova resposta do tópico, obrigado pela perspectiva.
Gus Crawford
2

Caso você tenha apenas um controlador e queira acessar todas as ações no root, você pode pular o nome do controlador como este

routes.MapRoute(
        "Default", 
        "{action}/{id}", 
        new { controller = "Home", action = "Index", 
        id = UrlParameter.Optional }
);
Manjoor
fonte