Include the PluginController Area when searching for matching surface… (#12218)
This commit is contained in:
committed by
Sebastiaan Janssen
parent
ce6a3d6751
commit
7e6e9c7431
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user