2017-08-12 57 views
1

首先,我读了this questionthis question 我想我有另一个问题。因为一切都是一样的。在MVC5中使用路由属性

我有MVC5项目。我有2个领域。 首先,我的默认根类是这样的。

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional}); 
} 

第一区域路由配置。

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "App_default", 
     "App/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

在这一点上,是没有问题的。不过,我想是这样的:

这个应用程序/控制器现在

public class AccountsController : Controller 
{ 
    // GET: App/Accounts 
    [Route("app/accounts/list/{Id}")] 
    public ActionResult List() 
    { 
     return View(); 
    } 
} 

,我可以访问诸如:

  • 本地主机/索引/索引OK
  • 本地主机/应用/索引/ Index OK
  • localhost/app/accounts/list/45646 ERR或

如何使用区域路由属性?我做不到?

+0

'[路线(“应用程序/帐号/列表/ {ID} “)]'更改为'[Route(”App/accounts/list/{Id}“)]' –

回答

0

为了使'localhost/app/accounts/list/45646'URL正常工作,您需要在List ActionResult中接收一个整数作为参数。

public class AccountsController : Controller 
{ 
    // GET: App/Accounts 
    [Route("app/accounts/list/{Id}")] 
    public ActionResult List(int Id) 
    { 

      return View(); 
     } 
    } 
0

首先您需要启用属性路由

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

     //Enable attribute routing 
     routes.MapMvcAttributeRoutes(); 

     //Area registration should be done after 
     //attribute routes to avoid route conflicts 
     AreaRegistration.RegisterAllAreas(); 

     //convention-based routing 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional} 
    ); 
} 

然后适当的属性添加到控制器

[RouteArea("AreaName", AreaPrefix = "app/accounts")] 
public class AccountsController : Controller { 
    [HttpGet] 
    [Route("list/{id:int}")] // Matches GET app/accounts/list/45646 
    public ActionResult List(int id) { 
     return View(); 
    } 
}