Search code examples
c#asp.net-mvc-5routesattributerouting

Configure AttributeRouting in ASP.NET MVC 5


I have an area RetailersAssistance and a controller-

namespace SkyTracker.Areas.RetailersAssistance.Controllers
{
  [RouteArea("ra")]
  public class LoginController : Controller
  {       
    [Route("foo")]
    public ActionResult Test()
    {
        return View();
    }
 }
}

I would like to reach Test() action method via http://localhost:61899/ra/foo.

I have configured RouteConfig.cs to allow Attribute Routing-

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapMvcAttributeRoutes();
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

This is my area registration code-

public class RetailersAssistanceAreaRegistration : AreaRegistration 
{
    public override string AreaName 
    {
        get 
        {
            return "RetailersAssistance";
        }
    }


    public override void RegisterArea(AreaRegistrationContext context) 
    {

        context.MapRoute(
            "RetailersAssistance_default",
            "ra/{controller}/{action}/{id}",
            new {controller="Login",  action = "Test", id = UrlParameter.Optional },
            new[] { "SkyTracker.Areas.RetailersAssistance.Controllers" }
        );
    }
}

But the above url returns 404. What did I miss here?


Solution

  • try use [context.Routes.MapMvcAttributeRoutes()] in RegisterArea method like this :

    public override void RegisterArea(AreaRegistrationContext context)
        {
            context.Routes.MapMvcAttributeRoutes();
            context.MapRoute(
                "RetailersAssistance_default",
                "ra/{controller}/{action}/{id}",
                new { controller = "Login", action = "Test", id = UrlParameter.Optional },
                new[] { "SkyTracker.Areas.RetailersAssistance.Controllers" }
            );
        }