Fixing redirect on tenants with a URL prefix, fixes #4605

This commit is contained in:
Lombiq
2017-02-03 17:16:18 +01:00
committed by Zoltán Lehóczky
parent 8c1ffe2564
commit f28da9894a

View File

@@ -2,13 +2,15 @@
using System.Web; using System.Web;
using System.Web.Mvc; using System.Web.Mvc;
using Orchard.Utility.Extensions; using Orchard.Utility.Extensions;
using Orchard.Environment.Configuration;
namespace Orchard.Mvc.Extensions { namespace Orchard.Mvc.Extensions {
public static class ControllerExtensions { public static class ControllerExtensions {
public static ActionResult RedirectLocal(this Controller controller, string redirectUrl, Func<ActionResult> invalidUrlBehavior) { public static ActionResult RedirectLocal(this Controller controller, string redirectUrl, Func<ActionResult> invalidUrlBehavior) {
if (!string.IsNullOrWhiteSpace(redirectUrl) && controller.Request.IsLocalUrl(redirectUrl)) { if (!string.IsNullOrWhiteSpace(redirectUrl) && controller.Request.IsLocalUrl(redirectUrl)) {
return new RedirectResult(redirectUrl); return RedirectWithTenantPrefix(redirectUrl, controller);
} }
return invalidUrlBehavior != null ? invalidUrlBehavior() : null; return invalidUrlBehavior != null ? invalidUrlBehavior() : null;
} }
@@ -18,10 +20,25 @@ namespace Orchard.Mvc.Extensions {
public static ActionResult RedirectLocal(this Controller controller, string redirectUrl, string defaultUrl) { public static ActionResult RedirectLocal(this Controller controller, string redirectUrl, string defaultUrl) {
if (controller.Request.IsLocalUrl(redirectUrl)) { if (controller.Request.IsLocalUrl(redirectUrl)) {
return new RedirectResult(redirectUrl); return RedirectWithTenantPrefix(redirectUrl, controller);
} }
return new RedirectResult(defaultUrl ?? "~/"); return RedirectWithTenantPrefix(defaultUrl ?? "~/", controller);
}
private static ActionResult RedirectWithTenantPrefix(string redirectUrl, Controller controller) {
if (redirectUrl.StartsWith("~/")) {
ShellSettings settings;
var context = controller.ControllerContext.GetWorkContext();
if (context != null &&
context.TryResolve<ShellSettings>(out settings) &&
!string.IsNullOrWhiteSpace(settings.RequestUrlPrefix)) {
redirectUrl = VirtualPathUtility.ToAbsolute(redirectUrl, controller.Request.ApplicationPath.TrimEnd('/') + "/" + settings.RequestUrlPrefix);
}
}
return new RedirectResult(redirectUrl);
} }
} }
} }