Ha Bui
Oct 1, 2019
  4317
(3 votes)

Get rid of EPiServer Commerce Migrate redirect loop

Phew! Take 2 hours to get rids of the infinitive loop from EPiServer ECommerce after upgrade from 9.2 to 12.17!

You can Google search with: episerver commerce migration loop

Then some guys below appear:

1. https://world.episerver.com/forum/developer-forum/Episerver-Commerce/Thread-Container/2019/5/passing-thru-episervercommercemigrate-when-created-new-site-in-azure/

2. https://world.episerver.com/forum/developer-forum/Episerver-Commerce/Thread-Container/2016/10/too-many-redirects-error-in-the-browser-after-package-update/

Some good instructions but does not work for my case: MigrateRedirect -> <RequireLogin> -> Owin -> MigrateRedirect -> <RequireLogin> -> ...

You can see more in those class:

EPiServer.Commerce.Internal.Migration.MigrationInitializationModule

EPiServer.Commerce.Internal.Migration.MigrationManager

...

Okay, so how can we resolve this? Some angeles below will help:

1.  // EPiServer.Commerce.Internal.Migration.MigrationManager

public virtual void MigrateAsync()

2. IoC with StructureMap and Interceptors holy light

[InitializableModule]
[ModuleDependency(typeof(EPiServer.Commerce.Initialization.InitializationModule))]
[ModuleDependency(typeof(CmsCoreInitialization))]
internal class ContainerInitialization : IConfigurableModule, IInitializableModule

and

public void ConfigureContainer(ServiceConfigurationContext context)
{
    ...
    context.ConfigurationComplete += (o, e) =>
            {
                e.Services.Intercept<MigrationManager>((locator, defaultMigrationManager) =>
                    new MigrationManagerInterceptor(defaultMigrationManager
                            , locator.GetInstance<MigrationStore>()
                            , locator.GetInstance<MigrateActionUrlResolver>()));
            };
}

and last one:

public class MigrationManagerInterceptor : MigrationManager
    {
        private MigrationManager _defaultMigrationManager;

        public MigrationManagerInterceptor(
            MigrationManager defaultMigrationManager
            , MigrationStore migrationStore
            , MigrateActionUrlResolver migrateActionUrlResolver)
            : base(migrationStore, migrateActionUrlResolver)
        {
            _defaultMigrationManager = defaultMigrationManager;
        }

        public override void RedirectToMigrationView()
        {
            MigrateAsync();
            return;
        }
    }

Good bye redirect loop! Cheer!

// Ha Bui

Oct 01, 2019

Comments

Luc Gosso (MVP)
Luc Gosso (MVP) Oct 1, 2019 07:37 AM

Thank you for sharing, ive been struggling with this for years! 

Your solution is probably the best in history... 

My work arounds was "Log in as webadmin" before you release - not always possible

Or change in Appsetting: AutoMigrateEPiServer set to true use to work - but i know, not always applicable

Ha Bui
Ha Bui Oct 2, 2019 08:00 AM

Thank @GOSSO for your very constructive comment! I also tried some solutions as your but issue still there (sometime it works, weird)

Thank @Quan for your recap / overview solution! I also agree with you about documentation that should be better because of upgrading is very high risky, if we have not then how can motivate partner / customer upgrade to newer version?

// Ha Bui

Please login to comment.
Latest blogs
Optimizely Opal: How to Build Effective Workflow Agents

If you're building workflow agents in Optimizely Opal, this post covers how specialized agents pass context to each other, why keeping agents small...

Andre | May 20, 2026

ReviewPR: An Azure Function That Reviews Your Azure DevOps Pull Requests With Claude

A while back I wrote about an  Azure Function App for PDF creation that we use to offload PDF rendering from our Optimizely DXP site. That same...

KennyG | May 19, 2026

Accelerating Optimizely CMS and Commerce upgrades with agentic AI (Part 2 of 2)

The Real Transformation in Optimizely CMS 13: Why the Upgrade Itself Is the Easy Part. A field-tested playbook for enterprise teams moving from...

Hung Le Hoang | May 18, 2026

Is the most powerful AI model really the best value?

Artificial Intelligence is already becoming part of everyday software development. Developers now use AI tools to generate code, write documentatio...

K Khan | May 16, 2026

Optimizely London Dev Meetup 2026

Well, everyone, it's that time of the year again, and we have another London Developer meet up coming for this summer. The date is set for the 2nd ...

Scott Reed | May 15, 2026

Semantic Search - Deep Dive

Deep dive into semantic search with Optimizely Graph

Michał Mitas | May 14, 2026 |