0

I need to make different route between dev env and prod env..

for dev, I expect to use http://localhost:5000 but for prod I expect to use http://example.com/mdc

I tried below in startup

app.UseMvc(routes =>
        {
            if (env.IsDevelopment())
            {
                routes.MapRoute(
                       name: "login_dev",
                       template: "{controller=Account}/{action=Login}/{id?}",
                       defaults: new { controller = "Account", action = "Login" });
            }
            else
            {
                routes.MapRoute(
                 name: "login_prod",
                 template: "mdc/{controller=Account}/{action=Login}/{id?}",
                 defaults: new { controller = "Account", action = "Login" });
            }

            routes.MapRoute(
                name: "default",
                template: "{api}/{controller}/{action}");
        });

I got:

Application startup exception
Microsoft.AspNetCore.Routing.RouteCreationException: An error occurred while creating the route with name 'login_prod' and template 'mdc/{controller=Account}/{action=Login}/{id?}'. ---> System.InvalidOperationException: The route parameter 'controller' has both an inline default value and an explicit default value specified. A route parameter cannot contain an inline default value when a default value is specified explicitly
Donald
  • 551
  • 2
  • 6
  • 22

1 Answers1

2

You can't have inline default and explicit default at the same time. so just change your routes to one of there options like:

routes.MapRoute(
                 name: "login_prod",
                 template: "mdc/{controller=Account}/{action=Login}/{id?}");  

Or

routes.MapRoute(
                 name: "login_prod",
                 template: "mdc/{controller}/{action}/{id?}",
                 defaults: new { controller = "Account", action = "Login" });
dev-masih
  • 4,188
  • 3
  • 33
  • 55
  • I tried that but it returns "Page not found" in production.. what I missed? – Donald Apr 22 '19 at 14:06
  • do I need to define all controllers one by one? [CODE] routes.MapRoute( name: "test1_prod", template: "mdc/{controller}/{action}/{id?}", defaults: new { controller = "Test1", action = "Index" }); routes.MapRoute( name: "test2_prod", template: "mdc/{controller}/{action}/{id?}", defaults: new { controller = "Test2", action = "Index" }); – Donald Apr 22 '19 at 15:30
  • no this might because of mdc prefix you have. look more in Area in MVC pattern – dev-masih Apr 23 '19 at 04:13