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:
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
Comments