One common question about ASP.Net MVC is how to make “default” controller.
Most websites will have a Home
controller with actions like About
, FAQ
, Privacy
, or similar pages. Ordinarily, these actions can only be accessed through URLs like ~/Home/About
. Most people would prefer to put these URLs directly off the root: ~/About
, etc.
Unfortunately, there is no obvious way to do that in ASP.Net MVC without making a separate route or controller for each action.
You cannot simply create a route matching "/{action}"
and map it to the Home
controller, since such a route would match any URL with exactly one term, including URLs meant for other controllers. Since the routing engine is not aware of MVC actions, it doesn’t know that this route should only match actions that actually exist on the controller.
To make it work, we can add a custom route constraint that forces this route to only match URLs that correspond to actual methods on the controller.
To this end, I wrote an extension method that scans a controller for all action methods and adds a route that matches actions in that controller. The code is available at gist.github.com/1225676. It can be used like this:
routes.MapDefaultController<Controllers.HomeController>();
This maps the route "/{action}/{id}"
(with id
optional) to all actions defined in HomeController
. Note that this code ignores custom ActionNameSelectorAttribute
s (The built-in [ActionName(…)]
is supported).
For additional flexibility, you can also create custom routes that will only match actions in a specific controller. This is useful if you have a single controller with a number of actions that has special route requirements that differ from the rest of your site.
For example:
routes.MapControllerActions<UsersController>( name: "User routes", url: "{userName}/{action}" defaults: new { action = "Index" } );
(Note that this example will also match URLs intended for other controllers with the same actions; plan your routes carefully)
21 comments:
Thanks a lot for this wonderful post, I am little bit new to this MVC and Routing thing.
I was confused that how MapDefaultController is available when I enter routes. I mean to say that in this line:
routes.MapDefaultController();
how come MapDefaultController becomes part of routes?
That's an extension method.
You need to include it in your project, from https://gist.github.com/1225676
And for anyone as noobish as I was. Remember to actually use the namespace in which you have included SLaks' genious extension. I.e. like this:
using SLaks.Web.Mvc;
I am wondering however... Did I do something wrong since this is not working with the @Html.ActionLink ? It keeps giving me an URL with the controller in it.
Html.ActionLink will use the first route it finds in the routing table that can handle the parameters you gave it.
You need to register this route before the default {controller}/{action}/{id}, or ActionLink() will still find the default first.
In MVC 4 Basic Project, there is an easy fix, and that is because the setup creates a RouteConfig.vb/cs in App_Start. The name of the default controller out of the box is "Home" (very obvious when you view the file), so if you want another controller to be the default, just change "Home" to "YourControllerName"
@Matt: That's not what I'm talking about.
That default route has been there since ASP.Net MVC 1.0.
However, that won't help you map URLs like /About to HomeController.About(). See my fourth paragraph.
if i am setting maproute as controller='account' and action='logon'.how to change maproute controller='home' and action='index' after login?
please help me.
The above article is nice and interesting, thank you willing to share! Greetings success of admin Percetakan Murah Rawamangun Jakarta Timur wish you deign to visit my website, thank you :)
This article is very important to me
London call girls
You need to check out this blog article for some tips on how to write good blog. This could be a real deal
I'm really satisfied to find this site.I need to thank you only for this stunning read.
mcafee.com/activate
The web page you have shared contains a lot of information. I have accumulated a lot of information.
infected days
Thank you for sharing this valuable method for establishing a default controller in ASP.Net MVC. The custom route constraint you presented serves as an excellent solution to guarantee that the route exclusively matches existing methods on the controller, resulting in cleaner and more user-friendly URLs. If you require assistance with editing your HRM dissertation, we offer reliable Hrm dissertation editing services UK, tailored to meet your specific needs.
Leveraging a default controller in ASP.Net MVC streamlines development. Essential for Warwick assignments, it provides a structured foundation. Seek warwick assignment help for expert guidance.
When navigating ASP.Net MVC, default controllers can streamline development. They provide a structured approach, simplifying tasks. Yet, for intricate assignments, seeking guidance from a cheap assignment writing service uk might be beneficial. It's about leveraging resources to enhance understanding and proficiency in ASP.Net MVC intricacies.
โปรโมชั่น pg slot มากมาย เล่นง่ายจ่ายจริง แตกจริง ต้อง pg slot เท่านั้น! เล่นสล็อต พีจีสล็อต เว็บไซต์ตรงผู้ให้บริการเกมสล็อตออนไลน์ชั้นหนึ่ง ทกลอง เล่น ฟรี พร้อมโบนัส
Great job implementing the new phone system! The transition was smooth, and I appreciate the effort put into training everyone on its features. However, it seems like there's a slight delay in call forwarding. Could we look into this to ensure optimal efficiency? Overall, though, excellent work!"
protective order hearing virginia
ASP.NET MVC uses a default controller to handle requests without specifying a controller name in the URL. This is useful for setting up a home or landing page for an application. To set up a default controller, define a controller, usually named 'HomeController', and set up a default route that points to your 'HomeController'. The 'RegisterRoutes' method is called during the application startup, typically in the 'Global.asax.cs' file. When a request is made without specifying a controller or action, the routing configuration will direct the request to the 'HomeController' and its 'Index' action method criminal lawyer alexandria va.
ASP.NET MVC routing often requires mapping URLs to actions without specifying the controller. However, creating a custom route like "/{action}" could interfere with routing for other controllers. This is because ASP.NET MVC routing by default expects both a controller and an action in the URL. To address this, a custom route can be created that specifically maps to actions in the Home controller while preventing conflicts with other controllers. This route can be configured using the HomeActions Route and the Default Route. This approach ensures clean URLs for specific actions without interfering with routing for other controllers. fastest way to get a divorce in virginia
"Using a default ||Monmouth County Trespassing Lawyer||divorce cases in new york controller in ASP.NET MVC streamlines your routing and simplifies application setup for quicker development."
Post a Comment