I have added an area to my MVC 3 project. I cannot seem to get routing working with a very simple scenario. It seems to always want to resolve to the area. Here is my configuration. At startup:
AreaRegistration.RegisterAllAreas();
IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Browse", action = "Index", id = UrlParameter.Optional }
And
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get { return "Admin"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { controller = "Users", action = "Index", id = UrlParameter.Optional }
);
}
}
In web.config:
<authentication mode="Forms">
<forms loginUrl="~/Login" defaultUrl="~/Browse" timeout="60" cookieless="UseDeviceProfile" />
</authentication>
I am using RouteDebugger to try to solve it. When I navigate to the Login page the debugger shows:
- AppRelativeCurrentExecutionFilePath: ~Login
- Admin/{controller}/{action}/{id} Does Not Match Current Request
- {controller}/{action}/{id} Matches Current Request
- Matched Route: {controller}/{action}/{id}
So far so good. But then it shows this:
- Generated URL: /Admin/Login?ReturnUrl=%2F using the route "Admin/{controller}/{action}/{id}"
Next I log in. My Login/Index method is not hit, and the debugger shows:
- AppRelativeCurrentExecutionFilePath: ~Login
- Admin/{controller}/{action}/{id} Does Not Match Current Request
- {controller}/{action}/{id} Matches Current Request
- Matched Route: {controller}/{action}/{id}
- Generated URL: /Admin/Login?ReturnUrl=%2FAdmin%2FLogin using the route "Admin/{controller}/{action}/{id}"
On the one hand it says that it does not match the Admin route, then in the generated URL it says it's using that route. I'm stumped.
Try to add your area parameter with a predefined value to your routing definition... For example instead of:
use:
Let me know if it helps... Regards