using JetBrains.Annotations; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Routing; namespace StardewModdingAPI.Web.Framework { /// Provides extensions on ASP.NET Core types. public static class Extensions { /// Get a URL with the absolute path for an action method. Unlike , only the specified are added to the URL without merging values from the current HTTP request. /// The URL helper to extend. /// The name of the action method. /// The name of the controller. /// An object that contains route values. /// The generated URL. public static string PlainAction(this IUrlHelper helper, [AspMvcAction] string action, [AspMvcController] string controller, object values = null) { RouteValueDictionary valuesDict = new RouteValueDictionary(values); foreach (var value in helper.ActionContext.RouteData.Values) { if (!valuesDict.ContainsKey(value.Key)) valuesDict[value.Key] = null; // explicitly remove it from the URL } return helper.Action(action, controller, valuesDict); } } }