asp.net核心MVC区域路由,某些区域的routevalue params

时间:2017-07-24 12:00:06

标签: c# asp.net-core-mvc asp.net-mvc-routing

我的mvc应用程序中有很多区域,其中一些需要路由值,作为整个路由的前缀。像这样...

mydomain.com/ {routevalue} / {面积} / {控制器} / {行动} / {ID?}

但是,有几个区域没有使用此路由值,因此我希望它们能够响应 mydomain.com/{area} / {控制器} / {行动} / {ID?}

我正在尝试构建一些涵盖此要求的路线模板,但没有太多运气。 我最初为每个区域添加了一条新路线,这样那些不需要路由值的路线就不会在模板中有这个路线。 当IIS运行在本地运行时,这工作正常,但是当我在服务器上部署到IIS时,这些区域路由都没有响应,而是我得到了404 ..

这是我当前的配置

routes.MapAreaRoute("YourAccountArea", "YourAccount", "YourAccount/{controller}/{action}/{id?}",
    defaults: new { area = "YourAccount", controller = "YourAccount", action = "Index" }); //<-- no product param on this area route

routes.MapAreaRoute("AboutYouArea", "AboutYou", "{product}/AboutYou/{controller}/{action}/{id?}",
    defaults: new { area = "AboutYou", product = "defaultproduct", controller = "AboutYou", action = "Index" });//<--this area does have the product prefix

routes.MapAreaRoute("SelectionArea", "Selection", "{product}/Selection/{controller}/{action}/{id?}",
    defaults: new { area = "Selection", controller = "SelectProduct", action = "Index" });//<--as does this

routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");//<--standard route

我想知道我是否可以减少这一点,实际上让它在服务器上响应?我目前在控制器或操作上没有任何AreaRoute属性(因为我之前不需要它们)

编辑: 然后我尝试了这个:

routes.MapRoute("areaNoProduct", "{area:exists}/{controller}/{action}/{id?}",
defaults: new { area = "YourAccount", controller = "YourAccount", action = "Index" });

routes.MapRoute(
   name: "areaRoute",
   template: "{product}/{area:exists}/{controller}/{action=index}/{id?}");

routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");

但不仅会将产品作为查询字符串弹出,但它不会为操作生成正确的URL,我认为路由不正确

1 个答案:

答案 0 :(得分:0)