asp.net 核心 MVC 区域路由,某些区域的路由值参数



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

mydomain.com/{路由值}/{区域}/{控制器}/{操作}/{id?}

但是,有几个区域不使用此路由值,因此我希望它们响应 mydomain.com/{area}/{controller}/{action}/{id?}

我正在尝试构建一些涵盖此要求的路线模板,但没有太多运气。 我最初为每个区域添加了一条新路由,这样不需要路由值的区域就不会在模板中显示该路由值。 在本地运行时,这是 IIS Express 时工作正常,但是一旦我在服务器上部署到 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,我认为这是路由不正确

我会使用 asp-tag-helpers 试一试 http://www.davepaquette.com/archive/2015/06/01/mvc-6-anchor-tag-helper.aspx

最新更新