2017-07-24 158 views
0

我在我的mvc应用中有很多区域,其中一些需要路由值作为整个路由的前缀。像这样...asp.net核心MVC区域路由,某些区域的路由值params

mydomain.com/{routevalue}/{area}/{controller}/{action}/{id?}

然而

,有几个不使用此区域routevalue,因此我想他们回应 mydomain.com/{area}/{controller}/{action}/{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是路由是不正确

回答