Include the PluginController Area when searching for matching surface… (#12218)

This commit is contained in:
VWA Software internet
2022-04-19 14:04:11 +02:00
committed by Sebastiaan Janssen
parent ce6a3d6751
commit 7e6e9c7431
3 changed files with 26 additions and 4 deletions

View File

@@ -1,3 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Http;
@@ -31,13 +32,20 @@ namespace Umbraco.Cms.Web.Website.Routing
_actionSelector = actionSelector;
}
/// <summary>
/// Determines if a custom controller can hijack the current route
/// </summary>
/// <typeparam name="T">The controller type to find</typeparam>
public ControllerActionDescriptor Find<T>(HttpContext httpContext, string controller, string action)
public ControllerActionDescriptor Find<T>(HttpContext httpContext, string controller, string action) => Find<T>(httpContext, controller, action, null);
/// <summary>
/// Determines if a custom controller can hijack the current route
/// </summary>
/// <typeparam name="T">The controller type to find</typeparam>
public ControllerActionDescriptor Find<T>(HttpContext httpContext, string controller, string action, string area)
{
IReadOnlyList<ControllerActionDescriptor> candidates = FindControllerCandidates<T>(httpContext, controller, action, DefaultActionName);
IReadOnlyList<ControllerActionDescriptor> candidates = FindControllerCandidates<T>(httpContext, controller, action, DefaultActionName, area);
if (candidates.Count > 0)
{
@@ -47,6 +55,7 @@ namespace Umbraco.Cms.Web.Website.Routing
return null;
}
/// <summary>
/// Return a list of controller candidates that match the custom controller and action names
/// </summary>
@@ -54,7 +63,8 @@ namespace Umbraco.Cms.Web.Website.Routing
HttpContext httpContext,
string customControllerName,
string customActionName,
string defaultActionName)
string defaultActionName,
string area = null)
{
// Use aspnetcore's IActionSelector to do the finding since it uses an optimized cache lookup
var routeValues = new RouteValueDictionary
@@ -62,6 +72,12 @@ namespace Umbraco.Cms.Web.Website.Routing
[ControllerToken] = customControllerName,
[ActionToken] = customActionName, // first try to find the custom action
};
if (area != null)
{
routeValues[AreaToken] = area;
}
var routeData = new RouteData(routeValues);
var routeContext = new RouteContext(httpContext)
{

View File

@@ -1,3 +1,4 @@
using System;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Controllers;
@@ -5,6 +6,11 @@ namespace Umbraco.Cms.Web.Website.Routing
{
public interface IControllerActionSearcher
{
ControllerActionDescriptor Find<T>(HttpContext httpContext, string controller, string action);
ControllerActionDescriptor Find<T>(HttpContext httpContext, string controller, string action, string area)
=> Find<T>(httpContext, controller, action);
}
}

View File

@@ -240,7 +240,7 @@ namespace Umbraco.Cms.Web.Website.Routing
[ActionToken] = postedInfo.ActionName
};
ControllerActionDescriptor surfaceControllerDescriptor = _controllerActionSearcher.Find<SurfaceController>(httpContext, postedInfo.ControllerName, postedInfo.ActionName);
ControllerActionDescriptor surfaceControllerDescriptor = _controllerActionSearcher.Find<SurfaceController>(httpContext, postedInfo.ControllerName, postedInfo.ActionName, postedInfo.Area);
if (surfaceControllerDescriptor == null)
{