// note: Pulled out service route registration separately because it's not testable T.T (won't run outside IIS/WAS)
        public static void RegisterServiceRoutes(RouteCollection routes)
        {
            routes.MapServiceRoute(
                RouteName.V1ApiFeed,
                "api/v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapServiceRoute(
                "LegacyFeedService",
                "v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapServiceRoute(
                "v1" + RouteName.V1ApiFeed,
                "api/v1",
                typeof(V1Feed));

            routes.MapServiceRoute(
                RouteName.V2ApiCuratedFeed,
                "api/v2/curated-feed",
                typeof(V2CuratedFeed));

            routes.MapServiceRoute(
                RouteName.V2ApiFeed,
                "api/v2/",
                typeof(V2Feed));
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapServiceRoute<HypermediaAPI.RootController>("");
            routes.MapServiceRoute<HypermediaAPI.Login.LoginController>("Login");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
Example #3
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapServiceRoute<GameService>("game");
            routes.MapServiceRoute<AuthService>("auth");
            routes.MapServiceRoute<UserService>("user");
            routes.MapServiceRoute<EventService>("event");

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });
        }
Example #4
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapServiceRoute <GameService>("game");
            routes.MapServiceRoute <AuthService>("auth");
            routes.MapServiceRoute <UserService>("user");
            routes.MapServiceRoute <EventService>("event");

            routes.MapRoute(
                "Default",
                "{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });
        }
Example #5
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            var config = new WebApiConfiguration { EnableTestClient = true };

            config.ErrorHandlers = OnErrorHandlers;

            if (UseHttpContextForStoringUniqueRequestId)
            {
                config.MessageHandlerFactory = () => new List<DelegatingHandler> { new HttpContextRequestIdHandler() };
            }
            else
            {
                config.MessageHandlerFactory = () => new List<DelegatingHandler> { new OperationContextRequestIdHandler() };
            }

            routes.SetDefaultHttpConfiguration(config);

            routes.MapServiceRoute<StringService>("api/str");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            ContainerBuilder builder = new ContainerBuilder();
            Action<MappingConfiguration> mappingsConfig = mappings=>mappings.FluentMappings.AddFromAssemblyOf<NosSessionMap>();
            builder.Register<INHibernateSessionProvider, SqlServerConnectionStringNHibernateSessionProvider>().WithArguments(
                "nosplanner", mappingsConfig).ControlledBy<SingletonLifecycle>();
            builder.Register<INosSessionRepository, NosSessionRepository>().ControlledBy<SingletonLifecycle>();
            builder.Register<IAttendeeRepository, AttendeeRepository>().ControlledBy<SingletonLifecycle>();
            IContainer container = builder.Build();
            var configuration =
                HttpHostConfiguration
                    .Create()
                        .SetResourceFactory((serviceType, instanceContext, request) => container.Resolve(serviceType), null)
                        .SetErrorHandler<ContactManagerErrorHandler>();

            routes.MapServiceRoute<SessionsResource>("sessions", configuration);
            routes.MapServiceRoute<SessionResource>("session", configuration);
            routes.MapServiceRoute<AttendeesResource>("attendees",configuration);
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapServiceRoute<BlogEngineService>("blog");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

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

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
                new { controller = "^(?!SignupSvc).*" }
            );

            var bldr = HttpHostConfiguration.Create().SetOperationHandlerFactory(new JsonOnlyFactory());
            routes.MapServiceRoute<SignupSvc>("SignupSvc", bldr);
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default",                                                                 // Route name
                "{controller}/{action}/{id}",                                              // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
                new { controller = "^(?!SignupSvc).*" }
                );

            var bldr = HttpHostConfiguration.Create().SetOperationHandlerFactory(new JsonOnlyFactory());

            routes.MapServiceRoute <SignupSvc>("SignupSvc", bldr);
        }
Example #10
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            var config = new WebApiConfiguration() {EnableTestClient = true, EnableHelpPage = true};

            routes.SetDefaultHttpConfiguration(config);

            routes.MapServiceRoute<ExpeditionApi>("api/expvar");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

              // configure api service
              var config = new HttpConfiguration() { EnableTestClient = true };
              routes.MapServiceRoute<ContactsApi>("api/contacts", config);

              // configure mvc controllers
              routes.MapRoute(
              "Default", // Route name
              "{controller}/{action}/{id}", // URL with parameters
              new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

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

            // Custom configuration which enables the structuremap integaration
            // via create/release instance methods.
            var config = new ApiConfiguration() { EnableTestClient = true };
            routes.SetDefaultHttpConfiguration(config);

            routes.MapServiceRoute<ContactsApi>("api/contacts");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
                new { controller = ServiceContracts.In(Assembly.GetExecutingAssembly()).WithDefaultConverter() }
                );

            var configurationBuilder = HttpHostConfiguration.Create()
                .SetMessageHandlerFactory(new CustomHttpMessageChannelFactory())
                .SetOperationHandlerFactory(new CustomHttpOperationHandlerFactory());

            routes.MapServiceRoute<DateTimeService>(configurationBuilder);
        }
Example #14
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            HttpConfiguration configuration = new WebApiConfiguration();// {EnableTestClient = true};
            configuration.Formatters.Add(new JpgFormatter());
            configuration.Formatters.Add(new RssFormatter());
            configuration.MessageHandlers.Add(typeof(UriFormatHandler));
            #if DEBUG
            configuration.EnableTestClient = true;
            #endif
            routes.MapServiceRoute<DonaldApi>("api/donald", configuration);
            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
Example #15
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            var config = new HttpConfiguration();
            config.EnableTestClient = true;
            config.MessageHandlers.Add(typeof(LoggingHandler));
            config.ErrorHandlers = delegate { new ExceptionErrorHandler(); };

            routes.SetDefaultHttpConfiguration(config);
            routes.MapServiceRoute<ContactsApi>("api/contacts");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }
Example #16
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            var config = new WebApiConfiguration()
            {
                EnableTestClient = true, EnableHelpPage = true
            };

            routes.SetDefaultHttpConfiguration(config);

            routes.MapServiceRoute <ExpeditionApi>("api/expvar");

            routes.MapRoute(
                "Default",                    // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
                );
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            // configure api service
            var config = new HttpConfiguration()
            {
                EnableTestClient = true
            };

            routes.MapServiceRoute <ContactsApi>("api/contacts", config);

            // configure mvc controllers
            routes.MapRoute(
                "Default",                    // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

                );
        }
Example #18
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
            routes.IgnoreRoute("{*Content}", new { imgs = @"(.*/)?Content(/.*)?" });
            routes.IgnoreRoute("{*Scripts}", new { scripts = @"(.*/)?Scripts(/.*)?" });

            routes.MapRoute(RouteName.Home, "", MVC.Pages.Home());

            routes.MapRouteSeo(
                RouteName.InstallerBatchFile, "installChocolatey.cmd", new
            {
                controller = "Pages",
                Action     = "InstallerBatchFile"
            });

            routes.MapRouteSeo(
                RouteName.Features, "features", new
            {
                controller = "Pages",
                Action     = "Features"
            });

            routes.MapRouteSeo(
                RouteName.About, "about", new
            {
                controller = "Pages",
                Action     = "About"
            });

            routes.MapRouteSeo(
                RouteName.Notice, "notice", new
            {
                controller = "Pages",
                Action     = "Notice"
            });

            var pricingRoute = routes.MapRoute(
                RouteName.Pricing, "pricing", new
            {
                controller = "Pages",
                Action     = "Pricing"
            });

            routes.Redirect(r => r.MapRoute(RouteName.Compare, "compare")).To(pricingRoute);

            routes.MapRouteSeo(
                RouteName.Install, "install", new
            {
                controller = "Pages",
                Action     = "Install"
            });

            routes.MapRouteSeo(
                RouteName.Business, "business", new
            {
                controller = "Pages",
                Action     = "Business"
            });

            routes.MapRouteSeo(
                RouteName.FAQ, "faq", new
            {
                controller = "Pages",
                Action     = "FAQ"
            });

            routes.MapRouteSeo(
                RouteName.Kickstarter, "kickstarter", new
            {
                controller = "Pages",
                Action     = "Kickstarter"
            });

            routes.MapRouteSeo(
                RouteName.Terms, "terms", new
            {
                controller = "Pages",
                Action     = "Terms"
            });

            routes.MapRouteSeo(
                RouteName.Privacy, "privacy", new
            {
                controller = "Pages",
                Action     = "Privacy"
            });

            routes.MapRouteSeo(
                RouteName.Media, "media", new
            {
                controller = "Pages",
                Action     = "Media"
            });

            routes.MapRouteSeo(
                RouteName.Company, "company", new
            {
                controller = "Pages",
                Action     = "Company"
            });

            routes.MapRouteSeo(
                RouteName.ContactUs, "contact", new
            {
                controller = "Pages",
                Action     = "ContactUs"
            });

            routes.MapRouteSeo(
                RouteName.Support, "support", new
            {
                controller = "Pages",
                Action     = "Support"
            });

            routes.MapRouteSeo(
                RouteName.ReportIssue, "bugs", new
            {
                controller = "Pages",
                Action     = "ReportIssue"
            });

            routes.MapRouteSeo(
                RouteName.Press, "press", new
            {
                controller = "Pages",
                Action     = "Press"
            });

            routes.MapRouteSeo(
                RouteName.Partner, "partner", new
            {
                controller = "Pages",
                Action     = "Partner"
            });

            routes.MapRouteSeo(
                RouteName.Security, "security", new
            {
                controller = "Pages",
                Action     = "Security"
            });

            routes.MapRouteSeo(
                RouteName.Docs,
                "docs/{docName}",
                new { controller = "Documentation", action = "Documentation", docName = "home" }
                );

            routes.MapRoute(RouteName.Stats, "stats", MVC.Pages.Stats());

            routes.MapRoute(
                "rss feed", "feed.rss", new
            {
                controller = "RSS",
                Action     = "feed.rss"
            });

            routes.Add(new JsonRoute("json/{controller}"));

            routes.MapRoute(RouteName.Policies, "policies/{action}", MVC.Pages.Terms());

            var packageListRoute = routes.MapRoute(RouteName.ListPackages, "packages", MVC.Packages.ListPackages());

            routes.MapRoute(
                RouteName.NotifyComment, "packages/{packageId}/notify-comment", new
            {
                controller = MVC.Packages.Name,
                action     = "NotifyMaintainersOfAddedComment"
            });

            var uploadPackageRoute = routes.MapRoute(RouteName.UploadPackage, "packages/upload", MVC.Packages.UploadPackage());

            routes.MapRoute(RouteName.VerifyPackage, "packages/verify-upload", MVC.Packages.VerifyPackage());

            routes.MapRoute(RouteName.CancelUpload, "packages/cancel-upload", MVC.Packages.CancelUpload());

            routes.MapRoute(
                RouteName.PackageOwnerConfirmation, "packages/{id}/owners/{username}/confirm/{token}", new
            {
                controller = MVC.Packages.Name,
                action     = "ConfirmOwner"
            });

            // We need the following two routes (rather than just one) due to Routing's
            // Consecutive Optional Parameter bug. :(
            var packageDisplayRoute = routes.MapRoute(
                RouteName.DisplayPackage, "packages/{id}/{version}", MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional), null /*defaults*/, new
            {
                version = new VersionRouteConstraint()
            });

            var packageVersionActionRoute = routes.MapRoute(
                RouteName.PackageVersionAction, "packages/{id}/{version}/{action}", new
            {
                controller = MVC.Packages.Name
            }, new
            {
                version = new VersionRouteConstraint()
            });

            var packageActionRoute = routes.MapRoute(
                RouteName.PackageAction, "packages/{id}/{action}", new
            {
                controller = MVC.Packages.Name
            });

            var resendRoute = routes.MapRoute("ResendConfirmation", "account/ResendConfirmation", MVC.Users.ResendConfirmation());

            //Redirecting v1 Confirmation Route
            routes.Redirect(r => r.MapRoute("v1Confirmation", "Users/Account/ChallengeEmail")).To(resendRoute);

            routes.MapRoute(
                RouteName.Authentication, "users/account/{action}", new
            {
                controller = MVC.Authentication.Name
            });

            routes.MapRoute(RouteName.Profile, "profiles/{username}", MVC.Users.Profiles());

            routes.MapRoute(RouteName.PasswordReset, "account/{action}/{username}/{token}", MVC.Users.ResetPassword());

            routes.MapRoute(RouteName.Account, "account/{action}", MVC.Users.Account());

            routes.MapRoute(
                "site" + RouteName.DownloadPackage, "packages/{id}/{version}/DownloadPackage", MVC.Api.GetPackage(), defaults: new
            {
                version = UrlParameter.Optional
            }, constraints: new
            {
                httpMethod = new HttpMethodConstraint("GET")
            });

            // V1 Routes
            routes.MapRoute("v1Legacy" + RouteName.PushPackageApi, "PackageFiles/{apiKey}/nupkg", MVC.Api.CreatePackagePost());
            routes.MapRoute("v1Legacy" + RouteName.PublishPackageApi, "PublishedPackages/Publish", MVC.Api.PublishPackage());

            // V2 routes
            routes.MapRoute(
                "v2" + RouteName.VerifyPackageKey, "api/v2/verifykey/{id}/{version}", MVC.Api.VerifyPackageKey(), defaults: new
            {
                id      = UrlParameter.Optional,
                version = UrlParameter.Optional
            });

            routes.MapRoute(
                "v2" + RouteName.DownloadPackage, "api/v2/package/{id}/{version}", MVC.Api.GetPackage(), defaults: new
            {
                version = UrlParameter.Optional
            }, constraints: new
            {
                httpMethod = new HttpMethodConstraint("GET")
            });

            routes.MapRoute(
                "v2" + RouteName.PushPackageApi, "api/v2/package", MVC.Api.CreatePackagePut(), defaults: null, constraints: new
            {
                httpMethod = new HttpMethodConstraint("PUT")
            });

            routes.MapRoute(
                "v2" + RouteName.DeletePackageApi, "api/v2/package/{id}/{version}", MVC.Api.DeletePackage(), defaults: null, constraints: new
            {
                httpMethod = new HttpMethodConstraint("DELETE")
            });

            routes.MapRoute(
                "v2" + RouteName.PublishPackageApi, "api/v2/package/{id}/{version}", MVC.Api.PublishPackage(), defaults: null, constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            });

            routes.MapServiceRoute(RouteName.V2ApiSubmittedFeed, "api/v2/submitted", typeof(V2SubmittedFeed));

            routes.MapRoute(
                "v2" + RouteName.TestPackageApi,
                "api/v2/test/{id}/{version}",
                MVC.Api.TestPackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.ValidatePackageApi,
                "api/v2/validate/{id}/{version}",
                MVC.Api.ValidatePackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.CleanupPackageApi,
                "api/v2/cleanup/{id}/{version}",
                MVC.Api.CleanupPackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.DownloadCachePackageApi,
                "api/v2/cache/{id}/{version}",
                MVC.Api.DownloadCachePackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.ScanPackageApi,
                "api/v2/scan/{id}/{version}",
                MVC.Api.ScanPackage(),
                defaults: null
                );

            routes.MapRoute("v2PackageIds", "api/v2/package-ids", MVC.Api.GetPackageIds());

            routes.MapRoute("v2PackageVersions", "api/v2/package-versions/{id}", MVC.Api.GetPackageVersions());

            routes.MapServiceRoute(RouteName.V2ApiFeed, "api/v2/", typeof(V2Feed));

            // Redirected Legacy Routes

            routes.Redirect(r => r.MapRoute("ReportAbuse", "Package/ReportAbuse/{id}/{version}", MVC.Packages.ReportAbuse()), permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PackageActions", "Package/{action}/{id}", MVC.Packages.ContactOwners(), null /*defaults*/, // This next bit looks bad, but it's not. It will never change because
                    // it's mapping the legacy routes to the new better routes.
                    new
            {
                action = "ContactOwners|ManagePackageOwners"
            }), permanent: true).To(packageActionRoute);

            // TODO: this route looks broken as there is no EditPackage action
            //routes.Redirect(
            //    r => r.MapRoute(
            //        "EditPackage",
            //        "Package/Edit/{id}/{version}",
            //        new { controller = PackagesController.ControllerName, action = "EditPackage" }),
            //    permanent: true).To(packageVersionActionRoute);

            routes.Redirect(r => r.MapRoute(RouteName.ListPackages, "List/Packages", MVC.Packages.ListPackages()), permanent: true).To(packageListRoute);

            routes.Redirect(r => r.MapRoute(RouteName.DisplayPackage, "List/Packages/{id}/{version}", MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional)), permanent: true)
            .To(packageDisplayRoute);

            routes.Redirect(r => r.MapRoute(RouteName.NewSubmission, "Contribute/NewSubmission", MVC.Packages.UploadPackage()), permanent: true).To(uploadPackageRoute);
        }
Example #19
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
            routes.IgnoreRoute("{*Content}", new { imgs = @"(.*/)?Content(/.*)?" });
            routes.IgnoreRoute("{*Scripts}", new { scripts = @"(.*/)?Scripts(/.*)?" });

            routes.MapRoute(RouteName.Home, "", MVC.Pages.Home());

            routes.MapRoute(
                RouteName.About, "about", new
                {
                    controller = "Pages",
                    Action = "About"
                });

            routes.MapRoute(
                RouteName.InstallerBatchFile, "installChocolatey.cmd", new
                {
                    controller = "Pages",
                    Action = "InstallerBatchFile"
                });

            routes.MapRoute(
                RouteName.Notice, "notice", new
                {
                    controller = "Pages",
                    Action = "Notice"
                });

            routes.MapRoute(RouteName.Stats, "stats", MVC.Pages.Stats());

            routes.MapRoute(
                "rss feed", "feed.rss", new
                {
                    controller = "RSS",
                    Action = "feed.rss"
                });

            routes.Add(new JsonRoute("json/{controller}"));

            routes.MapRoute(RouteName.Policies, "policies/{action}", MVC.Pages.Terms());

            var packageListRoute = routes.MapRoute(RouteName.ListPackages, "packages", MVC.Packages.ListPackages());

            routes.MapRoute(
                RouteName.NotifyComment, "packages/{packageId}/notify-comment", new
                {
                    controller = MVC.Packages.Name,
                    action = "NotifyMaintainersOfAddedComment"
                });

            var uploadPackageRoute = routes.MapRoute(RouteName.UploadPackage, "packages/upload", MVC.Packages.UploadPackage());

            routes.MapRoute(RouteName.VerifyPackage, "packages/verify-upload", MVC.Packages.VerifyPackage());

            routes.MapRoute(RouteName.CancelUpload, "packages/cancel-upload", MVC.Packages.CancelUpload());

            routes.MapRoute(
                RouteName.PackageOwnerConfirmation, "packages/{id}/owners/{username}/confirm/{token}", new
                {
                    controller = MVC.Packages.Name,
                    action = "ConfirmOwner"
                });

            // We need the following two routes (rather than just one) due to Routing's 
            // Consecutive Optional Parameter bug. :(
            var packageDisplayRoute = routes.MapRoute(
                RouteName.DisplayPackage, "packages/{id}/{version}", MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional), null /*defaults*/, new
                {
                    version = new VersionRouteConstraint()
                });

            var packageVersionActionRoute = routes.MapRoute(
                RouteName.PackageVersionAction, "packages/{id}/{version}/{action}", new
                {
                    controller = MVC.Packages.Name
                }, new
                {
                    version = new VersionRouteConstraint()
                });

            var packageActionRoute = routes.MapRoute(
                RouteName.PackageAction, "packages/{id}/{action}", new
                {
                    controller = MVC.Packages.Name
                });

            var resendRoute = routes.MapRoute("ResendConfirmation", "account/ResendConfirmation", MVC.Users.ResendConfirmation());

            //Redirecting v1 Confirmation Route
            routes.Redirect(r => r.MapRoute("v1Confirmation", "Users/Account/ChallengeEmail")).To(resendRoute);

            routes.MapRoute(
                RouteName.Authentication, "users/account/{action}", new
                {
                    controller = MVC.Authentication.Name
                });

            routes.MapRoute(RouteName.Profile, "profiles/{username}", MVC.Users.Profiles());

            routes.MapRoute(RouteName.PasswordReset, "account/{action}/{username}/{token}", MVC.Users.ResetPassword());

            routes.MapRoute(RouteName.Account, "account/{action}", MVC.Users.Account());

            routes.MapRoute(
                "site" + RouteName.DownloadPackage, "packages/{id}/{version}/DownloadPackage", MVC.Api.GetPackage(), defaults: new
                {
                    version = UrlParameter.Optional
                }, constraints: new
                {
                    httpMethod = new HttpMethodConstraint("GET")
                });
            
            // V1 Routes
            routes.MapRoute("v1Legacy" + RouteName.PushPackageApi, "PackageFiles/{apiKey}/nupkg", MVC.Api.CreatePackagePost());
            routes.MapRoute("v1Legacy" + RouteName.PublishPackageApi, "PublishedPackages/Publish", MVC.Api.PublishPackage());

            // V2 routes
            routes.MapRoute(
                "v2" + RouteName.VerifyPackageKey, "api/v2/verifykey/{id}/{version}", MVC.Api.VerifyPackageKey(), defaults: new
                {
                    id = UrlParameter.Optional,
                    version = UrlParameter.Optional
                });

            routes.MapRoute(
                "v2" + RouteName.DownloadPackage, "api/v2/package/{id}/{version}", MVC.Api.GetPackage(), defaults: new
                {
                    version = UrlParameter.Optional
                }, constraints: new
                {
                    httpMethod = new HttpMethodConstraint("GET")
                });

            routes.MapRoute(
                "v2" + RouteName.PushPackageApi, "api/v2/package", MVC.Api.CreatePackagePut(), defaults: null, constraints: new
                {
                    httpMethod = new HttpMethodConstraint("PUT")
                });

            routes.MapRoute(
                "v2" + RouteName.DeletePackageApi, "api/v2/package/{id}/{version}", MVC.Api.DeletePackage(), defaults: null, constraints: new
                {
                    httpMethod = new HttpMethodConstraint("DELETE")
                });

            routes.MapRoute(
                "v2" + RouteName.PublishPackageApi, "api/v2/package/{id}/{version}", MVC.Api.PublishPackage(), defaults: null, constraints: new
                {
                    httpMethod = new HttpMethodConstraint("POST")
                });

            routes.MapServiceRoute(RouteName.V2ApiSubmittedFeed, "api/v2/submitted", typeof(V2SubmittedFeed));

            //routes.MapRoute("v2" + RouteName.TestPackageApi, "api/v2/test/{id}/{version}",
            //     new {controller = "Api", action = "TestPackageApi"}
            //     );

            routes.MapRoute(
                 "v2" + RouteName.TestPackageApi, 
                 "api/v2/test/{id}/{version}", 
                 MVC.Api.TestPackage(), 
                 defaults: null,
                 constraints: new
                 {
                    httpMethod = new HttpMethodConstraint("POST")
                 }
            );
            
            routes.MapRoute(
                 "v2" + RouteName.ValidatePackageApi, 
                 "api/v2/validate/{id}/{version}",
                 MVC.Api.ValidatePackage(), 
                 defaults: null,
                 constraints: new
                 {
                    httpMethod = new HttpMethodConstraint("POST")
                 }
            );
            
            routes.MapRoute(
                 "v2" + RouteName.CleanupPackageApi, 
                 "api/v2/cleanup/{id}/{version}",
                 MVC.Api.CleanupPackage(), 
                 defaults: null,
                 constraints: new
                 {
                    httpMethod = new HttpMethodConstraint("POST")
                 }
            );   
            
            routes.MapRoute(
                 "v2" + RouteName.DownloadCachePackageApi,
                 "api/v2/cache/{id}/{version}",
                 MVC.Api.DownloadCachePackage(), 
                 defaults: null,
                 constraints: new
                 {
                    httpMethod = new HttpMethodConstraint("POST")
                 }
            );
            
            routes.MapRoute("v2PackageIds", "api/v2/package-ids", MVC.Api.GetPackageIds());

            routes.MapRoute("v2PackageVersions", "api/v2/package-versions/{id}", MVC.Api.GetPackageVersions());

            routes.MapServiceRoute(RouteName.V2ApiFeed, "api/v2/", typeof(V2Feed));

            // Redirected Legacy Routes

            routes.Redirect(r => r.MapRoute("ReportAbuse", "Package/ReportAbuse/{id}/{version}", MVC.Packages.ReportAbuse()), permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PackageActions", "Package/{action}/{id}", MVC.Packages.ContactOwners(), null /*defaults*/, // This next bit looks bad, but it's not. It will never change because 
                    // it's mapping the legacy routes to the new better routes.
                    new
                    {
                        action = "ContactOwners|ManagePackageOwners"
                    }), permanent: true).To(packageActionRoute);

            // TODO: this route looks broken as there is no EditPackage action
            //routes.Redirect(
            //    r => r.MapRoute(
            //        "EditPackage",
            //        "Package/Edit/{id}/{version}",
            //        new { controller = PackagesController.ControllerName, action = "EditPackage" }),
            //    permanent: true).To(packageVersionActionRoute);

            routes.Redirect(r => r.MapRoute(RouteName.ListPackages, "List/Packages", MVC.Packages.ListPackages()), permanent: true).To(packageListRoute);

            routes.Redirect(r => r.MapRoute(RouteName.DisplayPackage, "List/Packages/{id}/{version}", MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional)), permanent: true)
                  .To(packageDisplayRoute);

            routes.Redirect(r => r.MapRoute(RouteName.NewSubmission, "Contribute/NewSubmission", MVC.Packages.UploadPackage()), permanent: true).To(uploadPackageRoute);
        }
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapServiceRoute<AtomFeedService>("Feed", new AtomFeedHttpConfiguration());

            routes.MapRoute(
                "Index", // Route name
                "blogs", // URL with parameters
                new { controller = "Blogs", action = "Index"} // Parameter defaults
            );

            routes.MapRoute(
                "Create", // Route name
                "blogs/create", // URL with parameters
                new { controller = "Blogs", action = "Create"} // Parameter defaults
            );

            routes.MapRoute(
                "Edit", // Route name
                "blogs/{id}/edit", // URL with parameters
                new { controller = "Blogs", action = "Edit"} // Parameter defaults
            );

            routes.MapRoute(
                "Delete", // Route name
                "blogs/{id}/delete", // URL with parameters
                new { controller = "Blogs", action = "Delete"} // Parameter defaults
            );

            routes.MapRoute(
                "Details", // Route name
                "blogs/{id}", // URL with parameters
                new { controller = "Blogs", action = "Details"} // Parameter defaults
            );

            routes.MapRoute(
                "Posts", // Route name
                "blogs/{blogId}/posts", // URL with parameters
                new { controller = "Posts", action = "Index" } // Parameter defaults
            );

            routes.MapRoute(
                "CreatePost", // Route name
                "blogs/{blogId}/posts/create", // URL with parameters
                new { controller = "Posts", action = "Create" } // Parameter defaults
            );

            routes.MapRoute(
                "PostEdit", // Route name
                "blogs/{blogId}/posts/{id}/edit", // URL with parameters
                new { controller = "Posts", action = "Edit" } // Parameter defaults
            );

            routes.MapRoute(
                "PostDelete", // Route name
                "blogs/{blogId}/posts/{id}/delete", // URL with parameters
                new { controller = "Posts", action = "Delete" } // Parameter defaults
            );

            
            routes.MapRoute(
                "PostDetails", // Route name
                "blogs/{blogId}/posts/{id}", // URL with parameters
                new { controller = "Posts", action = "Details" } // Parameter defaults
            );


            routes.MapRoute(
                "Default", // Route name
                "", // URL with parameters
                new { controller = "Home", action = "Index"} // Parameter defaults
            );

            routes.MapRoute(
                "All", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional  } // Parameter defaults
            );
        }
Example #21
0
 public static void RegisterRoutes(RouteCollection routes)
 {
     routes.MapServiceRoute <StoryService>("stories");
 }
Example #22
0
 public static void RegisterRoutes(RouteCollection routes)
 {
     routes.MapServiceRoute<StoryService>("stories");
 }
Example #23
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                RouteName.Home,
                "",
                MVC.Pages.Home());

            routes.Add(new JsonRoute("json/{controller}"));

            routes.MapRoute(
                RouteName.Policies,
                "policies/{action}",
                MVC.Pages.Terms());

            var packageListRoute = routes.MapRoute(
                RouteName.ListPackages,
                "packages",
                MVC.Packages.ListPackages());

            routes.MapRoute(
                RouteName.UploadPackage,
                "upload/package",
                MVC.Packages.UploadPackage());

            // We need the following two routes (rather than just one) due to Routing's 
            // Consecutive Optional Parameter bug. :(
            var packageDisplayRoute = routes.MapRoute(
                RouteName.DisplayPackage,
                "packages/{id}/{version}",
                MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional),
                null /*defaults*/,
                new { version = new VersionRouteConstraint() });

            var packageVersionActionRoute = routes.MapRoute(
                RouteName.PackageVersionAction,
                "packages/{id}/{version}/{action}",
                new { controller = MVC.Packages.Name },
                new { version = new VersionRouteConstraint() });

            var packageActionRoute = routes.MapRoute(
                RouteName.PackageAction,
                "packages/{id}/{action}",
                new { controller = MVC.Packages.Name });

            routes.MapRoute(
                RouteName.Authentication,
                "users/account/{action}",
                new { controller = MVC.Authentication.Name });

            routes.MapRoute(
                RouteName.Profile,
                "profiles/{username}",
                MVC.Users.Profiles());

            routes.MapRoute(
                RouteName.PasswordReset,
                "account/{action}/{username}/{token}",
                MVC.Users.ResetPassword());

            routes.MapRoute(
                RouteName.Account,
                "account/{action}",
                MVC.Users.Account());

            routes.MapRoute(
                RouteName.PushPackageApi,
                "PackageFiles/{apiKey}/nupkg",
                MVC.Api.CreatePackage());

            routes.MapRoute(
                RouteName.PublishPackageApi,
                "PublishedPackages/Publish",
                MVC.Api.PublishPackage());

            routes.MapRoute(
                RouteName.DeletePackageApi,
                "Packages/{apiKey}/{id}/{version}",
                MVC.Api.DeletePackage());

            routes.MapServiceRoute(
                RouteName.V1ApiFeed,
                "api/feeds/v1",
                typeof(V1Feed));

            routes.MapServiceRoute(
                RouteName.V2ApiFeed,
                "api/feeds/v2",
                typeof(V2Feed));

            routes.MapServiceRoute(
                RouteName.ApiFeed,
                "api/feeds",
                typeof(V2Feed));

            // Redirected Legacy Routes

            routes.Redirect(
                r => r.MapRoute(
                    "ReportAbuse",
                    "Package/ReportAbuse/{id}/{version}",
                    MVC.Packages.ReportAbuse()),
                permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PackageActions",
                    "Package/{action}/{id}",
                    MVC.Packages.ContactOwners(),
                    null /*defaults*/,
                    // This next bit looks bad, but it's not. It will never change because 
                    // it's mapping the legacy routes to the new better routes.
                    new { action = "ContactOwners|ManagePackageOwners" }),
                permanent: true).To(packageActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PublishPackage",
                    "Package/New/{id}/{version}",
                    MVC.Packages.PublishPackage()),
                permanent: true).To(packageVersionActionRoute);

            // TODO: this route looks broken as there is no EditPackage action
            //routes.Redirect(
            //    r => r.MapRoute(
            //        "EditPackage",
            //        "Package/Edit/{id}/{version}",
            //        new { controller = PackagesController.Name, action = "EditPackage" }),
            //    permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.ListPackages,
                    "List/Packages",
                    MVC.Packages.ListPackages()),
                permanent: true).To(packageListRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.DisplayPackage,
                    "List/Packages/{id}/{version}",
                    MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional)),
                permanent: true).To(packageDisplayRoute);
        }
Example #24
0
        // note: Pulled out service route registration separately because it's not testable T.T (won't run outside IIS/WAS) 
        public static void RegisterServiceRoutes(RouteCollection routes)
        {
            routes.MapServiceRoute(
                RouteName.V1ApiFeed,
                "api/v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapServiceRoute(
                "LegacyFeedService",
                "v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapServiceRoute(
                "v1" + RouteName.V1ApiFeed,
                "api/v1",
                typeof(V1Feed));

            routes.MapServiceRoute(
                RouteName.V2ApiCuratedFeed,
                "api/v2/curated-feed",
                typeof(V2CuratedFeed));

            routes.MapServiceRoute(
                RouteName.V2ApiFeed,
                "api/v2/",
                typeof(V2Feed));
        }
Example #25
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                RouteName.Home,
                "",
                MVC.Pages.Home());

            routes.MapRoute(
                RouteName.Stats,
                "stats",
                MVC.Pages.Stats());

            routes.Add(new JsonRoute("json/{controller}"));

            routes.MapRoute(
                RouteName.Policies,
                "policies/{action}",
                MVC.Pages.Terms());

            var packageListRoute = routes.MapRoute(
                RouteName.ListPackages,
                "packages",
                MVC.Packages.ListPackages());

            var uploadPackageRoute = routes.MapRoute(
                RouteName.UploadPackage,
                "packages/upload",
                MVC.Packages.UploadPackage());

            routes.MapRoute(
                RouteName.VerifyPackage,
                "packages/verify-upload",
                MVC.Packages.VerifyPackage());

            routes.MapRoute(
                RouteName.CancelUpload,
                "packages/cancel-upload",
                MVC.Packages.CancelUpload());

            routes.MapRoute(
                RouteName.PackageOwnerConfirmation,
                "packages/{id}/owners/{username}/confirm/{token}",
                new { controller = MVC.Packages.Name, action = "ConfirmOwner" });

            // We need the following two routes (rather than just one) due to Routing's
            // Consecutive Optional Parameter bug. :(
            var packageDisplayRoute = routes.MapRoute(
                RouteName.DisplayPackage,
                "packages/{id}/{version}",
                MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional),
                null /*defaults*/,
                new { version = new VersionRouteConstraint() });

            var packageVersionActionRoute = routes.MapRoute(
                RouteName.PackageVersionAction,
                "packages/{id}/{version}/{action}",
                new { controller = MVC.Packages.Name },
                new { version = new VersionRouteConstraint() });

            var packageActionRoute = routes.MapRoute(
                RouteName.PackageAction,
                "packages/{id}/{action}",
                new { controller = MVC.Packages.Name });

            var resendRoute = routes.MapRoute(
                "ResendConfirmation",
                "account/ResendConfirmation",
                MVC.Users.ResendConfirmation());

            //Redirecting v1 Confirmation Route
            routes.Redirect(
                r => r.MapRoute(
                    "v1Confirmation",
                    "Users/Account/ChallengeEmail")).To(resendRoute);

            routes.MapRoute(
                RouteName.Authentication,
                "users/account/{action}",
                new { controller = MVC.Authentication.Name });

            routes.MapRoute(
                RouteName.Profile,
                "profiles/{username}",
                MVC.Users.Profiles());

            routes.MapRoute(
                RouteName.PasswordReset,
                "account/{action}/{username}/{token}",
                MVC.Users.ResetPassword());

            routes.MapRoute(
                RouteName.Account,
                "account/{action}",
                MVC.Users.Account());

            routes.MapRoute(
                RouteName.CuratedFeed,
                "curated-feeds/{name}",
                new { controller = CuratedFeedsController.ControllerName, action = "CuratedFeed" });

            routes.MapRoute(
                RouteName.CreateCuratedPackageForm,
                "forms/add-package-to-curated-feed",
                new { controller = CuratedPackagesController.ControllerName, action = "CreateCuratedPackageForm" });

            routes.MapRoute(
                RouteName.CuratedPackage,
                "curated-feeds/{curatedFeedName}/curated-packages/{curatedPackageId}",
                new { controller = CuratedPackagesController.ControllerName, action = "CuratedPackage" });

            routes.MapRoute(
                RouteName.CuratedPackages,
                "curated-feeds/{curatedFeedName}/curated-packages",
                new { controller = CuratedPackagesController.ControllerName, action = "CuratedPackages" });

            // TODO : Most of the routes are essentially of the format api/v{x}/*. We should refactor the code to vary them by the version.
            // V1 Routes
            // If the push url is /api/v1 then NuGet.Core would ping the path to resolve redirection.
            routes.MapServiceRoute(
                RouteName.V1ApiFeed,
                "api/v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapServiceRoute(
                "LegacyFeedService",
                "v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapRoute(
                "v1" + RouteName.VerifyPackageKey,
                "api/v1/verifykey/{id}/{version}",
                MVC.Api.VerifyPackageKey(),
                defaults: new { id = UrlParameter.Optional, version = UrlParameter.Optional });

            var downloadRoute = routes.MapRoute(
                "v1" + RouteName.DownloadPackage,
                "api/v1/package/{id}/{version}",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            routes.MapRoute(
                "v1" + RouteName.PushPackageApi,
                "v1/PackageFiles/{apiKey}/nupkg",
                MVC.Api.CreatePackagePost());

            routes.MapRoute(
                "v1" + RouteName.DeletePackageApi,
                "v1/Packages/{apiKey}/{id}/{version}",
                MVC.Api.DeletePackage());

            routes.MapRoute(
                "v1" + RouteName.PublishPackageApi,
                "v1/PublishedPackages/Publish",
                MVC.Api.PublishPackage());

            routes.MapServiceRoute(
                "v1" + RouteName.V1ApiFeed,
                "api/v1",
                typeof(V1Feed));

            // V2 routes
            routes.MapRoute(
                "v2" + RouteName.VerifyPackageKey,
                "api/v2/verifykey/{id}/{version}",
                MVC.Api.VerifyPackageKey(),
                defaults: new { id = UrlParameter.Optional, version = UrlParameter.Optional });

            routes.MapRoute(
                "v2CuratedFeeds" + RouteName.DownloadPackage,
                "api/v2/curated-feeds/package/{id}/{version}",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            routes.MapRoute(
                "v2" + RouteName.DownloadPackage,
                "api/v2/package/{id}/{version}",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            routes.MapRoute(
                "v2" + RouteName.PushPackageApi,
                "api/v2/package",
                MVC.Api.CreatePackagePut(),
                defaults: null,
                constraints: new { httpMethod = new HttpMethodConstraint("PUT") });

            routes.MapRoute(
                "v2" + RouteName.DeletePackageApi,
                "api/v2/package/{id}/{version}",
                MVC.Api.DeletePackage(),
                defaults: null,
                constraints: new { httpMethod = new HttpMethodConstraint("DELETE") });

            routes.MapRoute(
                "v2PackageIds",
                "api/v2/package-ids",
                MVC.Api.GetPackageIds());

            routes.MapRoute(
                "v2PackageVersions",
                "api/v2/package-versions/{id}",
                MVC.Api.GetPackageVersions());

            routes.MapServiceRoute(
                RouteName.V2ApiCuratedFeed,
                "api/v2/curated-feed",
                typeof(V2CuratedFeed));

            routes.MapServiceRoute(
                RouteName.V2ApiFeed,
                "api/v2/",
                typeof(V2Feed));

            routes.MapRoute(
                RouteName.DownloadNuGetExe,
                "nuget.exe",
                new { controller = MVC.Api.Name, action = MVC.Api.ActionNames.GetNuGetExe });

            // Redirected Legacy Routes

            routes.Redirect(
                r => r.MapRoute(
                    "ReportAbuse",
                    "Package/ReportAbuse/{id}/{version}",
                    MVC.Packages.ReportAbuse()),
                permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PackageActions",
                    "Package/{action}/{id}",
                    MVC.Packages.ContactOwners(),
                    null /*defaults*/,
                    // This next bit looks bad, but it's not. It will never change because
                    // it's mapping the legacy routes to the new better routes.
                    new { action = "ContactOwners|ManagePackageOwners" }),
                permanent: true).To(packageActionRoute);


            // TODO: this route looks broken as there is no EditPackage action
            //routes.Redirect(
            //    r => r.MapRoute(
            //        "EditPackage",
            //        "Package/Edit/{id}/{version}",
            //        new { controller = PackagesController.ControllerName, action = "EditPackage" }),
            //    permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.ListPackages,
                    "List/Packages",
                    MVC.Packages.ListPackages()),
                permanent: true).To(packageListRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.DisplayPackage,
                    "List/Packages/{id}/{version}",
                    MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional)),
                permanent: true).To(packageDisplayRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.NewSubmission,
                    "Contribute/NewSubmission",
                    MVC.Packages.UploadPackage()),
                permanent: true).To(uploadPackageRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "LegacyDownloadRoute",
                    "v1/Package/Download/{id}/{version}",
                    MVC.Api.GetPackage().AddRouteValue("version", UrlParameter.Optional)),
                permanent: true).To(downloadRoute);
        }
Example #26
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapRoute(
                RouteName.Home,
                "",
                MVC.Pages.Home());
            
            routes.MapRoute(
                RouteName.About,
                "about",
                new {controller = "Pages", Action="About"});

            routes.MapRoute(
                RouteName.Stats,
                "stats",
                MVC.Pages.Stats());
				
            routes.MapRoute(
             "rss feed",
             "feed.rss",
             new {controller = "RSS", Action = "feed.rss"});

            routes.Add(new JsonRoute("json/{controller}"));

            routes.MapRoute(
                RouteName.Policies,
                "policies/{action}",
                MVC.Pages.Terms());

            var packageListRoute = routes.MapRoute(
                RouteName.ListPackages,
                "packages",
                MVC.Packages.ListPackages());

            routes.MapRoute(
                RouteName.NotifyComment,
                "packages/{packageId}/notify-comment",
                new { controller = MVC.Packages.Name, action = "NotifyMaintainersOfAddedComment" });

            var uploadPackageRoute = routes.MapRoute(
                RouteName.UploadPackage,
                "packages/upload",
                MVC.Packages.UploadPackage());

            routes.MapRoute(
                RouteName.VerifyPackage,
                "packages/verify-upload",
                MVC.Packages.VerifyPackage());

            routes.MapRoute(
                RouteName.CancelUpload,
                "packages/cancel-upload",
                MVC.Packages.CancelUpload());

            routes.MapRoute(
                RouteName.PackageOwnerConfirmation,
                "packages/{id}/owners/{username}/confirm/{token}",
                new { controller = MVC.Packages.Name, action = "ConfirmOwner" });

            // We need the following two routes (rather than just one) due to Routing's 
            // Consecutive Optional Parameter bug. :(
            var packageDisplayRoute = routes.MapRoute(
                RouteName.DisplayPackage,
                "packages/{id}/{version}",
                MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional),
                null /*defaults*/,
                new { version = new VersionRouteConstraint() });

            var packageVersionActionRoute = routes.MapRoute(
                RouteName.PackageVersionAction,
                "packages/{id}/{version}/{action}",
                new { controller = MVC.Packages.Name },
                new { version = new VersionRouteConstraint() });

            var packageActionRoute = routes.MapRoute(
                RouteName.PackageAction,
                "packages/{id}/{action}",
                new { controller = MVC.Packages.Name });

            var resendRoute = routes.MapRoute(
               "ResendConfirmation",
               "account/ResendConfirmation",
               MVC.Users.ResendConfirmation());

            //Redirecting v1 Confirmation Route
            routes.Redirect(
               r => r.MapRoute(
                   "v1Confirmation",
                   "Users/Account/ChallengeEmail")).To(resendRoute);

            routes.MapRoute(
                RouteName.Authentication,
                "users/account/{action}",
                new { controller = MVC.Authentication.Name });

            routes.MapRoute(
                RouteName.Profile,
                "profiles/{username}",
                MVC.Users.Profiles());

            routes.MapRoute(
                RouteName.PasswordReset,
                "account/{action}/{username}/{token}",
                MVC.Users.ResetPassword());

            routes.MapRoute(
                RouteName.Account,
                "account/{action}",
                MVC.Users.Account());

            routes.MapRoute(
                RouteName.CuratedFeed,
                "curated-feeds/{name}",
                new { controller = CuratedFeedsController.ControllerName, action = "CuratedFeed" });

            routes.MapRoute(
                RouteName.CreateCuratedPackageForm,
                "forms/add-package-to-curated-feed",
                new { controller = CuratedPackagesController.ControllerName, action = "CreateCuratedPackageForm" });

            routes.MapRoute(
                RouteName.CuratedPackage,
                "curated-feeds/{curatedFeedName}/curated-packages/{curatedPackageId}",
                new { controller = CuratedPackagesController.ControllerName, action = "CuratedPackage" });

            routes.MapRoute(
                RouteName.CuratedPackages,
                "curated-feeds/{curatedFeedName}/curated-packages",
                new { controller = CuratedPackagesController.ControllerName, action = "CuratedPackages" });

            // TODO : Most of the routes are essentially of the format api/v{x}/*. We should refactor the code to vary them by the version.
            // V1 Routes
            // If the push url is /api/v1 then NuGet.Core would ping the path to resolve redirection. 
            routes.MapServiceRoute(
                RouteName.V1ApiFeed,
                "api/v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapServiceRoute(
                "LegacyFeedService",
                "v1/FeedService.svc",
                typeof(V1Feed));

            routes.MapRoute(
                "v1" + RouteName.VerifyPackageKey,
                "api/v1/verifykey/{id}/{version}",
                MVC.Api.VerifyPackageKey(),
                defaults: new { id = UrlParameter.Optional, version = UrlParameter.Optional });
            
            var downloadRoute = routes.MapRoute(
                "v1" + RouteName.DownloadPackage,
                "api/v1/package/{id}/{version}",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            routes.MapRoute(
                "site" + RouteName.DownloadPackage,
                "packages/{id}/{version}/DownloadPackage",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            routes.MapRoute(
                "v1" + RouteName.PushPackageApi,
                "v1/PackageFiles/{apiKey}/nupkg",
                MVC.Api.CreatePackagePost()); 
            
            routes.MapRoute(
                "v1Legacy" + RouteName.PushPackageApi,
                "PackageFiles/{apiKey}/nupkg",
                MVC.Api.CreatePackagePost());

            routes.MapRoute(
                "v1" + RouteName.DeletePackageApi,
                "v1/Packages/{apiKey}/{id}/{version}",
                MVC.Api.DeletePackage());

            routes.MapRoute(
                "v1" + RouteName.PublishPackageApi,
                "v1/PublishedPackages/Publish",
                MVC.Api.PublishPackage());
  
            routes.MapRoute(
                "v1Legacy" + RouteName.PublishPackageApi,
                "PublishedPackages/Publish",
                MVC.Api.PublishPackage());

            routes.MapServiceRoute(
               "v1legacy" + RouteName.V1ApiFeed,
               "api/feeds",
               typeof(V1Feed));

            routes.MapServiceRoute(
                "v1" + RouteName.V1ApiFeed,
                "api/v1",
                typeof(V1Feed));

            // V2 routes
            routes.MapRoute(
                "v2" + RouteName.VerifyPackageKey,
                "api/v2/verifykey/{id}/{version}",
                MVC.Api.VerifyPackageKey(),
                defaults: new { id = UrlParameter.Optional, version = UrlParameter.Optional });

            routes.MapRoute(
                "v2CuratedFeeds" + RouteName.DownloadPackage,
                "api/v2/curated-feeds/package/{id}/{version}",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });
            
            routes.MapRoute(
                "v2" + RouteName.DownloadPackage,
                "api/v2/package/{id}/{version}",
                MVC.Api.GetPackage(),
                defaults: new { version = UrlParameter.Optional },
                constraints: new { httpMethod = new HttpMethodConstraint("GET") });

            routes.MapRoute(
                "v2" + RouteName.PushPackageApi,
                "api/v2/package",
                MVC.Api.CreatePackagePut(),
                defaults: null,
                constraints: new { httpMethod = new HttpMethodConstraint("PUT") });

            routes.MapRoute(
                "v2" + RouteName.DeletePackageApi,
                "api/v2/package/{id}/{version}",
                MVC.Api.DeletePackage(),
                defaults: null,
                constraints: new { httpMethod = new HttpMethodConstraint("DELETE") });

            routes.MapRoute(
                "v2" + RouteName.PublishPackageApi,
                "api/v2/package/{id}/{version}",
                MVC.Api.PublishPackage(),
                defaults: null,
                constraints: new { httpMethod = new HttpMethodConstraint("POST") });

            routes.MapRoute(
	            "v2PackageIds",
	            "api/v2/package-ids",
	            MVC.Api.GetPackageIds());

            routes.MapRoute(
	            "v2PackageVersions",
	            "api/v2/package-versions/{id}",
	            MVC.Api.GetPackageVersions());

            routes.MapServiceRoute(
                RouteName.V2ApiCuratedFeed,
                "api/v2/curated-feed",
                typeof(V2CuratedFeed));

            routes.MapServiceRoute(
                RouteName.V2ApiFeed,
                "api/v2/",
                typeof(V2Feed));

            routes.MapRoute(
               RouteName.DownloadNuGetExe,
               "nuget.exe",
               new { controller = MVC.Api.Name, action = MVC.Api.ActionNames.GetNuGetExe });

            // Redirected Legacy Routes

            routes.Redirect(
                r => r.MapRoute(
                    "ReportAbuse",
                    "Package/ReportAbuse/{id}/{version}",
                    MVC.Packages.ReportAbuse()),
                permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PackageActions",
                    "Package/{action}/{id}",
                    MVC.Packages.ContactOwners(),
                    null /*defaults*/,
                    // This next bit looks bad, but it's not. It will never change because 
                    // it's mapping the legacy routes to the new better routes.
                    new { action = "ContactOwners|ManagePackageOwners" }),
                permanent: true).To(packageActionRoute);


            // TODO: this route looks broken as there is no EditPackage action
            //routes.Redirect(
            //    r => r.MapRoute(
            //        "EditPackage",
            //        "Package/Edit/{id}/{version}",
            //        new { controller = PackagesController.ControllerName, action = "EditPackage" }),
            //    permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.ListPackages,
                    "List/Packages",
                    MVC.Packages.ListPackages()),
                permanent: true).To(packageListRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.DisplayPackage,
                    "List/Packages/{id}/{version}",
                    MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional)),
                permanent: true).To(packageDisplayRoute);

            routes.Redirect(
                r => r.MapRoute(
                    RouteName.NewSubmission,
                    "Contribute/NewSubmission",
                    MVC.Packages.UploadPackage()),
                permanent: true).To(uploadPackageRoute);

            routes.Redirect(
               r => r.MapRoute(
                   "LegacyDownloadRoute",
                   "v1/Package/Download/{id}/{version}",
                   MVC.Api.GetPackage().AddRouteValue("version", UrlParameter.Optional)),
               permanent: true).To(downloadRoute);
        }
Example #27
0
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
            routes.IgnoreRoute("{*Content}", new { imgs = @"(.*/)?Content(/.*)?" });
            routes.IgnoreRoute("{*Scripts}", new { scripts = @"(.*/)?Scripts(/.*)?" });

            routes.MapRoute(RouteName.Home, "", MVC.Pages.Home());

            routes.MapRouteSeo(
                RouteName.InstallerBatchFile, "installChocolatey.cmd", new
            {
                controller = "Pages",
                Action     = "InstallerBatchFile"
            });

            routes.MapRouteSeo(
                RouteName.Features, "features", new
            {
                controller = "Pages",
                Action     = "Features"
            });

            routes.MapRouteSeo(
                RouteName.About, "about", new
            {
                controller = "Pages",
                Action     = "About"
            });

            routes.MapRouteSeo(
                RouteName.Notice, "notice", new
            {
                controller = "Pages",
                Action     = "Notice"
            });

            var pricingRoute = routes.MapRoute(
                RouteName.Pricing, "pricing", new
            {
                controller = "Pages",
                Action     = "Pricing"
            });

            routes.MapRoute(
                RouteName.Discount, "discount", new
            {
                controller = "Pages",
                Action     = "Discount"
            });

            routes.MapRoute(
                RouteName.Evaluation, "evaluation", new
            {
                controller = "Pages",
                Action     = "Evaluation"
            });

            routes.MapRouteSeo(
                RouteName.Compare, "compare", new
            {
                controller = "Pages",
                Action     = "Compare"
            });

            routes.MapRouteSeo(
                RouteName.Install, "install", new
            {
                controller = "Pages",
                Action     = "Install"
            });

            routes.MapRouteSeo(
                RouteName.Sitemap, "sitemap", new
            {
                controller = "Pages",
                Action     = "Sitemap"
            });

            routes.MapRouteSeo(
                RouteName.Community, "community", new
            {
                controller = "Pages",
                Action     = "Community"
            });

            var productsRoute = routes.MapRoute(
                RouteName.Products, "products", new
            {
                controller = "Pages",
                Action     = "Products"
            });

            routes.Redirect(r => r.MapRoute(RouteName.Business, "business")).To(productsRoute);

            routes.MapRouteSeo(
                RouteName.WhyChocolatey, "why-chocolatey", new
            {
                controller = "Pages",
                Action     = "WhyChocolatey"
            });

            routes.MapRouteSeo(
                RouteName.UseCases, "use-cases", new
            {
                controller = "Pages",
                Action     = "UseCases"
            });

            routes.MapRouteSeo(
                RouteName.HowChocolateyWorks, "how-chocolatey-works", new
            {
                controller = "Pages",
                Action     = "HowChocolateyWorks"
            });

            routes.MapRouteSeo(
                RouteName.Careers, "careers", new
            {
                controller = "Pages",
                Action     = "Careers"
            });

            routes.MapRouteSeo(
                RouteName.FAQ, "faq", new
            {
                controller = "Pages",
                Action     = "FAQ"
            });

            routes.MapRouteSeo(
                RouteName.Kickstarter, "kickstarter", new
            {
                controller = "Pages",
                Action     = "Kickstarter"
            });

            routes.MapRouteSeo(
                RouteName.Terms, "terms", new
            {
                controller = "Pages",
                Action     = "Terms"
            });

            routes.MapRouteSeo(
                RouteName.Privacy, "privacy", new
            {
                controller = "Pages",
                Action     = "Privacy"
            });

            routes.MapRouteSeo(
                RouteName.MediaKit, "media-kit", new
            {
                controller = "Pages",
                Action     = "MediaKit"
            });

            routes.MapRouteSeo(
                RouteName.Company, "company", new
            {
                controller = "Pages",
                Action     = "Company"
            });

            routes.MapRouteSeo(
                RouteName.ContactTrial, "contact/trial", new
            {
                controller = "Pages",
                Action     = "ContactTrial"
            });

            routes.MapRouteSeo(
                RouteName.ContactUs, "contact", new
            {
                controller = "Pages",
                Action     = "ContactUs"
            });

            routes.MapRouteSeo(
                RouteName.ContactGeneral, "contact/general", new
            {
                controller = "Pages",
                Action     = "ContactGeneral"
            });

            routes.MapRouteSeo(
                RouteName.ContactDiscount, "contact/student-discount", new
            {
                controller = "Pages",
                Action     = "ContactDiscount"
            });

            routes.MapRouteSeo(
                RouteName.ContactPartner, "contact/partner", new
            {
                controller = "Pages",
                Action     = "ContactPartner"
            });

            routes.MapRouteSeo(
                RouteName.ContactSales, "contact/sales", new
            {
                controller = "Pages",
                Action     = "ContactSales"
            });

            routes.MapRouteSeo(
                RouteName.ContactSalesOther, "contact/sales-for-another-organization", new
            {
                controller = "Pages",
                Action     = "ContactSalesOther"
            });

            routes.MapRouteSeo(
                RouteName.ContactBlocked, "contact/blocked-ip-address", new
            {
                controller = "Pages",
                Action     = "ContactBlocked"
            });

            routes.MapRouteSeo(
                RouteName.ContactQuickDeployment, "contact/quick-deployment", new
            {
                controller = "Pages",
                Action     = "ContactQuickDeployment"
            });

            routes.MapRouteSeo(
                RouteName.Support, "support", new
            {
                controller = "Pages",
                Action     = "Support"
            });

            routes.MapRouteSeo(
                RouteName.ReportIssue, "bugs", new
            {
                controller = "Pages",
                Action     = "ReportIssue"
            });

            routes.MapRouteSeo(
                RouteName.Press, "press", new
            {
                controller = "Pages",
                Action     = "Press"
            });

            routes.MapRouteSeo(
                RouteName.Partner, "partner", new
            {
                controller = "Pages",
                Action     = "Partner"
            });

            routes.MapRouteSeo(
                RouteName.Security, "security", new
            {
                controller = "Pages",
                Action     = "Security"
            });

            routes.MapRouteSeo(
                RouteName.Covid19, "covid-19", new
            {
                controller = "Pages",
                Action     = "Covid19"
            });

            routes.MapRouteSeo(
                RouteName.Styleguide,
                "styleguide/{styleguideName}",
                new { controller = "Styleguide", action = "Styleguide", styleguideName = "home" }
                );

            routes.MapRouteSeo(
                RouteName.BlogHome,
                "blog/",
                new { controller = "Blog", action = "Index" }
                );

            routes.MapRouteSeo(
                RouteName.BlogArticle,
                "blog/{articleName}",
                new { controller = "Blog", action = "Article" }
                );

            routes.MapRouteSeo(
                RouteName.Resources,
                "resources/{resourceType}",
                new { controller = "Resource", action = "Resources", resourceType = "home" }
                );

            var resourceNameRoute = new Route("resources/{resourceType}/{resourceName}", new RouteValueDictionary(new { controller = "Resource", action = "ResourceName" }), new HyphenatedRouteHandler());

            // ResourceName redirects
            routes.Redirect(r => r.MapRoute("ManagingWindowsAtFacebookRedirect", "resources/case-studies/managing-windows-at-facebook")).To(resourceNameRoute, new { resourceType = "case-studies", resourceName = "winops-2017-dan-sedlacek-managing-windows-at-facebook" });

            // Add in ResourceName route after redirects have been made
            routes.Add(RouteName.ResourceName, resourceNameRoute);

            var docsRoute = new Route("docs/{docName}", new RouteValueDictionary(new { controller = "Documentation", action = "Documentation", docName = "home" }), new HyphenatedRouteHandler());

            // Documentation redirects
            routes.Redirect(r => r.MapRoute("InstallRedirect", "docs/install")).To(docsRoute, new { docName = "installation" });
            routes.Redirect(r => r.MapRoute("FeaturesShimsRedirect", "docs/features-shims")).To(docsRoute, new { docName = "features-shim" });

            // Add in Docs route after redirects have been made
            routes.Add(RouteName.Docs, docsRoute);

            // temporary redirect
            routes.Redirect(r => r.MapRoute("CentralManagementFeature", "features-chocolatey-central-management")).To(docsRoute, new { docName = "features-chocolatey-central-management" });

            routes.MapRouteSeo(
                RouteName.Courses,
                "courses",
                new { controller = "Courses", action = "Courses" }
                );

            routes.MapRouteSeo(
                RouteName.CourseName,
                "courses/{courseName}/{courseModuleName}",
                new { controller = "Courses", action = "CourseName", courseName = "home", courseModuleName = "home" }
                );

            var solutionsRoute = routes.MapRoute(
                RouteName.Solutions,
                "solutions/{solutionName}",
                new { controller = "Solutions", action = "Solutions", solutionName = "home" }
                );

            routes.Redirect(r => r.MapRoute(RouteName.SelfService, "self-service")).To(solutionsRoute);

            routes.MapRoute(RouteName.Stats, "stats", MVC.Pages.Stats());

            routes.MapRoute(
                "rss feed", "feed.rss", new
            {
                controller = "RSS",
                Action     = "feed.rss"
            });

            routes.MapRoute(
                "blog rss feed", "blog.rss", new
            {
                controller = "Blog",
                Action     = "blog.rss"
            });

            routes.Add(new JsonRoute("json/{controller}"));

            routes.MapRoute(RouteName.Policies, "policies/{action}", MVC.Pages.Terms());

            var packageListRoute = routes.MapRoute(RouteName.ListPackages, "packages", MVC.Packages.ListPackages());

            routes.MapRoute(
                RouteName.NotifyComment, "packages/{packageId}/notify-comment", new
            {
                controller = MVC.Packages.Name,
                action     = "NotifyMaintainersOfAddedComment"
            });

            var uploadPackageRoute = routes.MapRoute(RouteName.UploadPackage, "packages/upload", MVC.Packages.UploadPackage());

            routes.MapRoute(RouteName.VerifyPackage, "packages/verify-upload", MVC.Packages.VerifyPackage());

            routes.MapRoute(RouteName.CancelUpload, "packages/cancel-upload", MVC.Packages.CancelUpload());

            routes.MapRoute(
                RouteName.PackageOwnerConfirmation, "packages/{id}/owners/{username}/confirm/{token}", new
            {
                controller = MVC.Packages.Name,
                action     = "ConfirmOwner"
            });

            // We need the following two routes (rather than just one) due to Routing's
            // Consecutive Optional Parameter bug. :(
            var packageDisplayRoute = routes.MapRoute(
                RouteName.DisplayPackage, "packages/{id}/{version}", MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional), null /*defaults*/, new
            {
                version = new VersionRouteConstraint()
            });

            var packageVersionActionRoute = routes.MapRoute(
                RouteName.PackageVersionAction, "packages/{id}/{version}/{action}", new
            {
                controller = MVC.Packages.Name
            }, new
            {
                version = new VersionRouteConstraint()
            });

            var packageActionRoute = routes.MapRoute(
                RouteName.PackageAction, "packages/{id}/{action}", new
            {
                controller = MVC.Packages.Name
            });

            var resendRoute = routes.MapRoute("ResendConfirmation", "account/ResendConfirmation", MVC.Users.ResendConfirmation());

            //Redirecting v1 Confirmation Route
            routes.Redirect(r => r.MapRoute("v1Confirmation", "Users/Account/ChallengeEmail")).To(resendRoute);

            routes.MapRoute(
                RouteName.Authentication, "users/account/{action}", new
            {
                controller = MVC.Authentication.Name
            });

            routes.MapRoute(RouteName.Profile, "profiles/{username}", MVC.Users.Profiles());

            routes.MapRoute(RouteName.PasswordReset, "account/{action}/{username}/{token}", MVC.Users.ResetPassword());

            routes.MapRoute(RouteName.Account, "account/{action}", MVC.Users.Account());

            routes.MapRoute(
                "site" + RouteName.DownloadPackage, "packages/{id}/{version}/DownloadPackage", MVC.Api.GetPackage(), defaults: new
            {
                version = UrlParameter.Optional
            }, constraints: new
            {
                httpMethod = new HttpMethodConstraint("GET")
            });

            // V1 Routes
            routes.MapRoute("v1Legacy" + RouteName.PushPackageApi, "PackageFiles/{apiKey}/nupkg", MVC.Api.CreatePackagePost());
            routes.MapRoute("v1Legacy" + RouteName.PublishPackageApi, "PublishedPackages/Publish", MVC.Api.PublishPackage());

            // V2 routes
            routes.MapRoute(
                "v2" + RouteName.VerifyPackageKey, "api/v2/verifykey/{id}/{version}", MVC.Api.VerifyPackageKey(), defaults: new
            {
                id      = UrlParameter.Optional,
                version = UrlParameter.Optional
            });

            routes.MapRoute(
                "v2" + RouteName.DownloadPackage, "api/v2/package/{id}/{version}", MVC.Api.GetPackage(), defaults: new
            {
                version = UrlParameter.Optional
            }, constraints: new
            {
                httpMethod = new HttpMethodConstraint("GET")
            });

            routes.MapRoute(
                "v2" + RouteName.PushPackageApi, "api/v2/package", MVC.Api.CreatePackagePut(), defaults: null, constraints: new
            {
                httpMethod = new HttpMethodConstraint("PUT")
            });

            routes.MapRoute(
                "v2" + RouteName.DeletePackageApi, "api/v2/package/{id}/{version}", MVC.Api.DeletePackage(), defaults: null, constraints: new
            {
                httpMethod = new HttpMethodConstraint("DELETE")
            });

            routes.MapRoute(
                "v2" + RouteName.PublishPackageApi, "api/v2/package/{id}/{version}", MVC.Api.PublishPackage(), defaults: null, constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            });

            routes.MapServiceRoute(RouteName.V2ApiSubmittedFeed, "api/v2/submitted", typeof(V2SubmittedFeed));

            routes.MapRoute(
                "v2" + RouteName.TestPackageApi,
                "api/v2/test/{id}/{version}",
                MVC.Api.TestPackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.ValidatePackageApi,
                "api/v2/validate/{id}/{version}",
                MVC.Api.ValidatePackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.CleanupPackageApi,
                "api/v2/cleanup/{id}/{version}",
                MVC.Api.CleanupPackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.DownloadCachePackageApi,
                "api/v2/cache/{id}/{version}",
                MVC.Api.DownloadCachePackage(),
                defaults: null,
                constraints: new
            {
                httpMethod = new HttpMethodConstraint("POST")
            }
                );

            routes.MapRoute(
                "v2" + RouteName.ScanPackageApi,
                "api/v2/scan/{id}/{version}",
                MVC.Api.ScanPackage(),
                defaults: null
                );

            routes.MapRouteSeo(
                "Search", "search", new
            {
                controller = "Packages",
                Action     = "ListPackages"
            });

            routes.MapRoute("v2PackageIds", "api/v2/package-ids", MVC.Api.GetPackageIds());

            routes.MapRoute("v2PackageVersions", "api/v2/package-versions/{id}", MVC.Api.GetPackageVersions());

            routes.MapServiceRoute(RouteName.V2ApiFeed, "api/v2/", typeof(V2Feed));

            // Redirected Legacy Routes

            routes.Redirect(r => r.MapRoute("ReportAbuse", "Package/ReportAbuse/{id}/{version}", MVC.Packages.ReportAbuse()), permanent: true).To(packageVersionActionRoute);

            routes.Redirect(
                r => r.MapRoute(
                    "PackageActions", "Package/{action}/{id}", MVC.Packages.ContactOwners(), null /*defaults*/, // This next bit looks bad, but it's not. It will never change because
                    // it's mapping the legacy routes to the new better routes.
                    new
            {
                action = "ContactOwners|ManagePackageOwners"
            }), permanent: true).To(packageActionRoute);

            // TODO: this route looks broken as there is no EditPackage action
            //routes.Redirect(
            //    r => r.MapRoute(
            //        "EditPackage",
            //        "Package/Edit/{id}/{version}",
            //        new { controller = PackagesController.ControllerName, action = "EditPackage" }),
            //    permanent: true).To(packageVersionActionRoute);

            routes.Redirect(r => r.MapRoute(RouteName.ListPackages, "List/Packages", MVC.Packages.ListPackages()), permanent: true).To(packageListRoute);

            routes.Redirect(r => r.MapRoute(RouteName.DisplayPackage, "List/Packages/{id}/{version}", MVC.Packages.DisplayPackage().AddRouteValue("version", UrlParameter.Optional)), permanent: true)
            .To(packageDisplayRoute);

            routes.Redirect(r => r.MapRoute(RouteName.NewSubmission, "Contribute/NewSubmission", MVC.Packages.UploadPackage()), permanent: true).To(uploadPackageRoute);
        }