Cómo configurar el controlador predeterminado en asp.net MVC 4 y MVC 5

106

¿Cómo configuro el controlador predeterminado para mi proyecto ASP.NET MVC 4 sin convertirlo en HomeController ?

¿Cómo debo configurar un área predeterminada cuando se inicia la aplicación?

Adrian10 BEN
fuente
¿Cómo cambiaría de "/" a "/ home como página raíz? Este" / home "debe estar visible en el navegador del cliente.
Andre Mesquita

Respuestas:

165

la mejor forma es cambiar de ruta. La ruta predeterminada (definida en su App_Start) establece/Home/Index

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

como página de destino predeterminada. Puede cambiar eso para que sea la ruta que desee.

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters*
        new { controller = "Sales", action = "ProjectionReport", 
        id = UrlParameter.Optional }
);
Dave Alperovich
fuente
13
En MVC 4, la ruta predeterminada se establece en App_Start / RouteConfig.cs
Eric Labashosky
Muy cierto. Actualmente estoy trabajando en proyectos en ambos y paso por alto estas cosas;)
Dave Alperovich
1
Dave tiene razón, pero me gustaría agregar que en MVC 4 el enrutamiento ya no se realiza en Global.asax, sino en RouteConfig.cs en App_Start .
Buen Samaritano
2
¿Cómo hacer que funcione cuando el controlador al que se hace referencia en la ruta predeterminada se encuentra en otra área (es decir, no en la raíz)?
superjos
debería poder hacer que la ruta predeterminada vaya a"AreaName/{controller}/{action}/{id}"
Dave Alperovich
30

Establezca el siguiente código en RouteConfig.cs en la carpeta 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 });
}

SI todavía no funciona, siga los pasos a continuación

Segunda forma: simplemente siga los pasos a continuación,

1) Haga clic derecho en su proyecto

2) Seleccione Propiedades

3) Seleccione la opción Web y luego seleccione Página específica (Controlador / Vista) y luego configure su página de inicio de sesión

Aquí, la cuenta es mi controlador y el inicio de sesión es mi método de acción (guardado en el controlador de cuenta)

Por favor, mire la ingrese la descripción de la imagen aquícaptura de pantalla adjunta .

Nimesh
fuente
15
Su "segunda vía" se trata de lo que sucede cuando depura su proyecto web. No tiene nada que ver con el "controlador predeterminado", es decir, qué página se muestra cuando navega a la página de destino de su sitio.
Martin Liversage
25

No vi esta pregunta respondida:

¿Cómo debo configurar un área predeterminada cuando se inicia la aplicación?

Entonces, así es como puede configurar un Área predeterminada:

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
fuente
1
gran pregunta, ¿por qué no lo creas como uno?
stuartdotnet
¿Qué es un 'Área'? Si defino una Vista, ¿se carga el diseño al que se hace referencia y luego una solicitud HTTP separada con los datos de mi vista? (es decir, operación Ajax separada) o ¿el diseño está representado y envuelto alrededor de mi vista?
Gus Crawford
2
@GusCrawford ¿Qué es un 'Área'? De msdn.microsoft.com/en-us/library/ee671793(VS.100).aspx : Para acomodar proyectos grandes, ASP.NET MVC le permite dividir las aplicaciones web en unidades más pequeñas que se denominan áreas. Las áreas proporcionan una forma de separar una gran aplicación web MVC en agrupaciones funcionales más pequeñas. Un área es efectivamente una estructura MVC dentro de una aplicación. Una aplicación puede contener varias estructuras (áreas) MVC.
Amna Ali
En cuanto a la otra pregunta, no creo que esté relacionada con esta respuesta y no parece relevante ni siquiera para la pregunta original. Puede ser, deberías publicarlo en otro lugar.
Amna Ali
Preguntaré por separado en una nueva respuesta de hilo gracias por la perspectiva.
Gus Crawford
2

En caso de que solo tenga un controlador y desee acceder a cada acción en la raíz, puede omitir el nombre del controlador como este

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