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.Mvc;
using Orchard.Utility.Extensions;
using Orchard.Environment.Configuration;
namespace Orchard.Mvc.Extensions {
public static class ControllerExtensions {
public static ActionResult RedirectLocal(this Controller controller, string redirectUrl, Func<ActionResult> invalidUrlBehavior) {
if (!string.IsNullOrWhiteSpace(redirectUrl) && controller.Request.IsLocalUrl(redirectUrl)) {
return new RedirectResult(redirectUrl);
return RedirectWithTenantPrefix(redirectUrl, controller);
}
return invalidUrlBehavior != null ? invalidUrlBehavior() : null;
}
@@ -18,10 +20,25 @@ namespace Orchard.Mvc.Extensions {
public static ActionResult RedirectLocal(this Controller controller, string redirectUrl, string defaultUrl) {
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);
}
}
}