Fix for issue 13017 - BeginUmbracoForm doesn't work with custom umbraco routes (#13103)

* Fix issue with custom Umbraco routes not working after submitting to a Surface controller

* Added comments

* Fixed breaking changes

* Fixed test by using correct new ctor

* Fixed initializtion of UmbracoRouteValueTransformer due to ambiguous ctor

Co-authored-by: Bjarke Berg <mail@bergmania.dk>
This commit is contained in:
Justin Neville
2022-12-06 11:39:43 +00:00
committed by Bjarke Berg
parent caed5bcb13
commit f28b4c1279
9 changed files with 432 additions and 50 deletions

View File

@@ -1,9 +1,14 @@
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Routing;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Web;
using Umbraco.Cms.Infrastructure.DependencyInjection;
using Umbraco.Cms.Web.Common.Middleware;
using Umbraco.Cms.Web.Common.Routing;
@@ -40,9 +45,21 @@ public static partial class UmbracoBuilderExtensions
builder.Services.AddDataProtection();
builder.Services.AddAntiforgery();
builder.Services.AddSingleton<UmbracoRouteValueTransformer>();
builder.Services.AddSingleton<UmbracoRouteValueTransformer>(x => new UmbracoRouteValueTransformer(
x.GetRequiredService<ILogger<UmbracoRouteValueTransformer>>(),
x.GetRequiredService<IUmbracoContextAccessor>(),
x.GetRequiredService<IPublishedRouter>(),
x.GetRequiredService<IRuntimeState>(),
x.GetRequiredService<IUmbracoRouteValuesFactory>(),
x.GetRequiredService<IRoutableDocumentFilter>(),
x.GetRequiredService<IDataProtectionProvider>(),
x.GetRequiredService<IControllerActionSearcher>(),
x.GetRequiredService<IPublicAccessRequestHandler>(),
x.GetRequiredService<IUmbracoVirtualPageRoute>()
));
builder.Services.AddSingleton<IControllerActionSearcher, ControllerActionSearcher>();
builder.Services.TryAddEnumerable(Singleton<MatcherPolicy, NotFoundSelectorPolicy>());
builder.Services.AddSingleton<IUmbracoVirtualPageRoute, UmbracoVirtualPageRoute>();
builder.Services.AddSingleton<IUmbracoRouteValuesFactory, UmbracoRouteValuesFactory>();
builder.Services.AddSingleton<IRoutableDocumentFilter, RoutableDocumentFilter>();