【问题标题】:Configure AttributeRouting in ASP.NET MVC 5在 ASP.NET MVC 5 中配置 AttributeRouting
【发布时间】:2017-04-25 15:37:38
【问题描述】:

我有一个区域RetailersAssistance 和一个控制器-

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

我想通过http://localhost:61899/ra/foo联系Test()操作方法。

我已将 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。我错过了什么?

【问题讨论】:

    标签: c# asp.net-mvc-5 routing attributerouting


    【解决方案1】:

    尝试在 RegisterArea 方法中使用 [context.Routes.MapMvcAttributeRoutes()],如下所示:

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

    【讨论】:

      【解决方案2】:

      使用 ActionName 而不是 Route 属性。 改变

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

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

      【讨论】:

        猜你喜欢
        • 2014-04-27
        • 2015-12-09
        • 1970-01-01
        • 1970-01-01
        • 2013-10-28
        • 2017-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多