How to set Default Controller in asp.net MVC 4 & MVC 5 - c#

How do I set Default Controller for my ASP.NET MVC 4 project without making it HomeController?
How should I setup a default Area when the application starts?

the best way is to change your route. The default route (defined in your App_Start) sets /Home/Index
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters*
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
as the default landing page. You can change that to be any route you wish.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters*
new { controller = "Sales", action = "ProjectionReport",
id = UrlParameter.Optional }
);

Set below code in RouteConfig.cs in App_Start folder
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 });
}
IF still not working then do below steps
Second Way :
You simple follow below steps,
1) Right click on your Project
2) Select Properties
3) Select Web option and then Select Specific Page (Controller/View) and then set your login page
Here, Account is my controller and Login is my action method (saved in Account Controller)
Please take a look attached screenshot.

I didn't see this question answered:
How should I setup a default Area when the application starts?
So, here is how you can set up a default Area:
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" });

In case you have only one controller and you want to access every action on root you can skip controller name like this
routes.MapRoute(
"Default",
"{action}/{id}",
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);

Related

Controllers creating correct routes so both work properly

I currently have 2 controllers in my project. My navigation bar uses #Html.ActionLinks and I have the actionlink pick the action and the controller. For some reason the actions are correct but it doesn’t always choose the controller. So im guessing this is something to do with my roureconfig? I been trying to make it choose the correct controller or having it choose ether one wth {controller}/{action} but still I haven’t had any luck
I have a PartsController and a OrderStatusController. When I click on my parts actionlinks they all work, but when I click on my orderstatus action link it goes “parts”, “OrderIndex” even tho I have it specifically saying “OrderStatus”, “OrderIndex” any idea why here are some of my configs I tried?
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller., action = "Index", id = UrlParameter.Optional }
//);
// OrderStatus/{action}/{id}
//routes.MapRoute(
// name: "OrderStatus",
// url: "{OrderStatus}/{action}/{id}",
// defaults: new { controller = "OrderStatus", action = "OrderIndex", id = UrlParameter.Optional }
//);
//// Parts/Index
//routes.MapRoute(
// name: "Parts_Index",
// url: "{Parts}/{Index}/{id}",
// defaults: new { controller = "Parts", action = "Index", id = UrlParameter.Optional }
//);
// Parts/Index (Home Page)
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Parts", action = "Index", id = UrlParameter.Optional }
);
Configure your OrderStatus route like this:
routes.MapRoute(
name: "OrderStatus",
url: "{controller}/{action}/{id}",
defaults: new { controller = "OrderStatus", action = "Index"}
);
It needs to be above of the default route since the MVC framework evaluates the routes from top to bottom (the order matters here) that is also why you get to the Parts view when trying order status..

ASP.NET MVC block a specific URL from the Default route

In ASP.NET MVC route configuration is like below:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
I am using [Route] attribute in Controller:
[Route("login")]
public ActionResult Login()
{
return View();
}
I can go to the page using both /login and Auth/Login. The second link is clearly from the default route, but I don't want that URL to go to my login page.
How can I do that?
To block a route from being served, you can use IgnoreRoute as long as you place it before the route you want to block:
routes.IgnoreRoute(url: "Auth/Login");
// Register any custom routes here...
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

How To Set Default Action on Mvc Startup [duplicate]

How do I set Default Controller for my ASP.NET MVC 4 project without making it HomeController?
How should I setup a default Area when the application starts?
the best way is to change your route. The default route (defined in your App_Start) sets /Home/Index
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters*
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
as the default landing page. You can change that to be any route you wish.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters*
new { controller = "Sales", action = "ProjectionReport",
id = UrlParameter.Optional }
);
Set below code in RouteConfig.cs in App_Start folder
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 });
}
IF still not working then do below steps
Second Way :
You simple follow below steps,
1) Right click on your Project
2) Select Properties
3) Select Web option and then Select Specific Page (Controller/View) and then set your login page
Here, Account is my controller and Login is my action method (saved in Account Controller)
Please take a look attached screenshot.
I didn't see this question answered:
How should I setup a default Area when the application starts?
So, here is how you can set up a default Area:
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" });
In case you have only one controller and you want to access every action on root you can skip controller name like this
routes.MapRoute(
"Default",
"{action}/{id}",
new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);

Understanding routing

I have trying to change the routing of my asp.net project. I want Login controller to load on startup of my project rather than any other controller.
So, I have added LoginDefault routemap in existing routes in asp project
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "LoginDefault",
url: "{controller}/{action}",
defaults: new { controller = "UserManagement", action = "Login" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
This loads up the Login controller right but in doing so the default routing is not executed. After login, dashboard controller is invoked but "Index" is added to each URL as below.
http://localhost:49799/Dashboard/Index
This has effected my URL and other Ajax call and this doesn't look neat. Before adding the LoginDefault the URL would be
http://localhost:49799/Dashboard
I would like to achieve this. If any other way is possible that too will be fine.
Thank you
try this
routes.MapRoute(
name: "LoginDefault",
url: "{controller}",
defaults: new { controller = "UserManagement", action = "Login" }
);

Routing root request to this controller and action in MVC

I have a URL request in the following format: http://localhost/activate?activationCode=X
I would like this request to be handled in the Home controller, by the Activate action.
I am not sure how to proceed. I have looked at RouteConfig.cs and see the way routes are defined here:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
But how can I make Home/Activate handle URL's of the following format? http://localhost/activate?activationCode=X
...so as to add a special case where activate proceeding the host name goes to the Home controller, and Activate action?
You need to create a specific route
routes.MapRoute(
name: "Activate",
url: "Activate/{id}",
defaults: new { controller = "Home", action = "Activate", id = UrlParameter.Optional }
);
and place this one before the default route.
In addition if you want http://localhost/activate/X rather than http://localhost/activate?activationCode=X, then change it to
routes.MapRoute(
name: "Activate",
url: "Activate/{activationCode}",
defaults: new { controller = "Home", action = "Activate", activationCode = UrlParameter.Optional }
);
and make the method in HomeController
public ActionResult Activate(string activationCode)

Categories

Resources