Настройка AttributeRouting в ASP.NET MVC 5

У меня есть область RetailersAssistance и контроллер-

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

Я хотел бы получить доступ к методу действия Test() через http://localhost:61899/ra/foo.

Я настроил RouteConfig.cs, чтобы разрешить маршрутизацию атрибутов.

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 }
        );
    }
}

Это мой региональный регистрационный код-

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" }
        );
    }
}

Но приведенный выше URL возвращает 404. Что я здесь пропустил?


person s.k.paul    schedule 10.12.2016    source источник


Ответы (2)


попробуйте использовать [context.Routes.MapMvcAttributeRoutes()] в методе RegisterArea следующим образом:

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" }
        );
    }
person Ali Sheikh Nezami    schedule 10.12.2016

Используйте ActionName вместо атрибута Route. Изменять

 [Route("foo")]
 public ActionResult Test()
 {
        return View();
  }

to

[ActionName("foo")]
public ActionResult Test()
{
   return View();
}
person Community    schedule 10.12.2016