# Conflicts: # src/Umbraco.Configuration/Legacy/GlobalSettings.cs # src/Umbraco.Core/Configuration/IGlobalSettings.cs # src/Umbraco.Core/Models/ContentBaseExtensions.cs # src/Umbraco.Core/Routing/ContentFinderByRedirectUrl.cs # src/Umbraco.Core/Routing/DefaultUrlProvider.cs # src/Umbraco.Core/Runtime/MainDom.cs # src/Umbraco.Core/Services/IRuntimeState.cs # src/Umbraco.Infrastructure/Compose/NotificationsComponent.cs # src/Umbraco.Infrastructure/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs # src/Umbraco.Infrastructure/RuntimeState.cs # src/Umbraco.Tests/Routing/UrlsWithNestedDomains.cs # src/Umbraco.Tests/Runtimes/StandaloneTests.cs # src/Umbraco.Tests/TestHelpers/TestObjects.cs # src/Umbraco.Web.BackOffice/Controllers/LogViewerController.cs # src/Umbraco.Web.BackOffice/Controllers/UsersController.cs # src/Umbraco.Web.BackOffice/Mapping/ContentMapDefinition.cs # src/Umbraco.Web.BackOffice/PropertyEditors/RteEmbedController.cs # src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs # src/Umbraco.Web.UI.NetCore/umbraco/UmbracoBackOffice/Default.cshtml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/da.xml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/en.xml # src/Umbraco.Web.UI.NetCore/umbraco/config/lang/en_us.xml # src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml # src/Umbraco.Web.UI/Views/Partials/Grid/Editors/Rte.cshtml # src/Umbraco.Web/Controllers/UmbLoginController.cs # src/Umbraco.Web/Install/Controllers/InstallController.cs # src/Umbraco.Web/PublishedElementExtensions.cs # src/Umbraco.Web/Runtime/WebInitialComposer.cs # src/Umbraco.Web/UmbracoHelper.cs # src/Umbraco.Web/UmbracoInjectedModule.cs # src/Umbraco.Web/UrlHelperExtensions.cs # src/Umbraco.Web/UrlHelperRenderExtensions.cs # src/Umbraco.Web/WebApi/UmbracoApiControllerBase.cs
123 lines
5.1 KiB
C#
123 lines
5.1 KiB
C#
using System;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using System.Web.Mvc;
|
|
using System.Web.Routing;
|
|
using Umbraco.Core;
|
|
using Umbraco.Web.Composing;
|
|
using Umbraco.Web.Mvc;
|
|
using Umbraco.Web.WebApi;
|
|
|
|
namespace Umbraco.Web
|
|
{
|
|
/// <summary>
|
|
/// Extension methods for UrlHelper
|
|
/// </summary>
|
|
public static class UrlHelperExtensions
|
|
{
|
|
/// <summary>
|
|
/// Return the URL for a Web Api service
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <param name="url"></param>
|
|
/// <param name="actionName"></param>
|
|
/// <param name="routeVals"></param>
|
|
/// <returns></returns>
|
|
public static string GetUmbracoApiService<T>(this UrlHelper url, string actionName, RouteValueDictionary routeVals = null)
|
|
where T : UmbracoApiController
|
|
{
|
|
return url.GetUmbracoApiService(actionName, typeof(T), routeVals);
|
|
}
|
|
|
|
public static string GetUmbracoApiServiceBaseUrl<T>(this UrlHelper url, Expression<Func<T, object>> methodSelector)
|
|
where T : UmbracoApiController
|
|
{
|
|
var method = Core.ExpressionHelper.GetMethodInfo(methodSelector);
|
|
if (method == null)
|
|
{
|
|
throw new MissingMethodException("Could not find the method " + methodSelector + " on type " + typeof(T) + " or the result ");
|
|
}
|
|
return url.GetUmbracoApiService<T>(method.Name).TrimEnd(method.Name);
|
|
}
|
|
|
|
public static string GetUmbracoApiService<T>(this UrlHelper url, Expression<Func<T, object>> methodSelector)
|
|
where T : UmbracoApiController
|
|
{
|
|
var method = Core.ExpressionHelper.GetMethodInfo(methodSelector);
|
|
if (method == null)
|
|
{
|
|
throw new MissingMethodException("Could not find the method " + methodSelector + " on type " + typeof(T) + " or the result ");
|
|
}
|
|
var parameters = Core.ExpressionHelper.GetMethodParams(methodSelector);
|
|
var routeVals = new RouteValueDictionary(parameters);
|
|
return url.GetUmbracoApiService<T>(method.Name, routeVals);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Return the URL for a Web Api service
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <param name="actionName"></param>
|
|
/// <param name="apiControllerType"></param>
|
|
/// <param name="routeVals"></param>
|
|
/// <returns></returns>
|
|
public static string GetUmbracoApiService(this UrlHelper url, string actionName, Type apiControllerType, RouteValueDictionary routeVals = null)
|
|
{
|
|
if (actionName == null) throw new ArgumentNullException(nameof(actionName));
|
|
if (string.IsNullOrEmpty(actionName)) throw new ArgumentException("Value can't be empty.", nameof(actionName));
|
|
if (apiControllerType == null) throw new ArgumentNullException(nameof(apiControllerType));
|
|
|
|
var area = "";
|
|
|
|
var apiController = Current.UmbracoApiControllerTypes
|
|
.SingleOrDefault(x => x == apiControllerType);
|
|
if (apiController == null)
|
|
throw new InvalidOperationException("Could not find the umbraco api controller of type " + apiControllerType.FullName);
|
|
var metaData = PluginController.GetMetadata(apiController);
|
|
if (!metaData.AreaName.IsNullOrWhiteSpace())
|
|
{
|
|
//set the area to the plugin area
|
|
area = metaData.AreaName;
|
|
}
|
|
return url.GetUmbracoApiService(actionName, ControllerExtensions.GetControllerName(apiControllerType), area, routeVals);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Return the URL for a Web Api service
|
|
/// </summary>
|
|
/// <param name="url"></param>
|
|
/// <param name="actionName"></param>
|
|
/// <param name="controllerName"></param>
|
|
/// <param name="area"></param>
|
|
/// <param name="routeVals"></param>
|
|
/// <returns></returns>
|
|
public static string GetUmbracoApiService(this UrlHelper url, string actionName, string controllerName, string area, RouteValueDictionary routeVals = null)
|
|
{
|
|
if (actionName == null) throw new ArgumentNullException(nameof(actionName));
|
|
if (string.IsNullOrEmpty(actionName)) throw new ArgumentException("Value can't be empty.", nameof(actionName));
|
|
if (controllerName == null) throw new ArgumentNullException(nameof(controllerName));
|
|
if (string.IsNullOrEmpty(controllerName)) throw new ArgumentException("Value can't be empty.", nameof(controllerName));
|
|
|
|
if (routeVals == null)
|
|
{
|
|
routeVals = new RouteValueDictionary(new {httproute = "", area = area});
|
|
}
|
|
else
|
|
{
|
|
var requiredRouteVals = new RouteValueDictionary(new { httproute = "", area = area });
|
|
requiredRouteVals.MergeLeft(routeVals);
|
|
//copy it back now
|
|
routeVals = requiredRouteVals;
|
|
}
|
|
|
|
return url.Action(actionName, controllerName, routeVals);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|