Я подумал, что поделюсь своим подходом к этому в ASP.NET MVC с использованием класса Uri
и некоторой магии расширения.
public static class UrlHelperExtensions
{
public static string AbsolutePath(this UrlHelper urlHelper,
string relativePath)
{
return new Uri(urlHelper.RequestContext.HttpContext.Request.Url,
relativePath).ToString();
}
}
Затем вы можете вывести абсолютный путь, используя:
// gives absolute path, e.g. https://example.com/customers
Url.AbsolutePath(Url.Action("Index", "Customers"));
С вложенными вызовами методов это выглядит немного уродливо, поэтому я предпочитаю расширить UrlHelper
с помощью общих методов действий, чтобы я мог сделать:
// gives absolute path, e.g. https://example.com/customers
Url.AbsoluteAction("Index", "Customers");
или
Url.AbsoluteAction("Details", "Customers", new{id = 123});
Полный класс расширения выглядит следующим образом:
public static class UrlHelperExtensions
{
public static string AbsolutePath(this UrlHelper urlHelper,
string relativePath)
{
return new Uri(urlHelper.RequestContext.HttpContext.Request.Url,
relativePath).ToString();
}
public static string AbsoluteAction(this UrlHelper urlHelper,
string actionName,
string controllerName)
{
return AbsolutePath(urlHelper,
urlHelper.Action(actionName, controllerName));
}
public static string AbsoluteAction(this UrlHelper urlHelper,
string actionName,
string controllerName,
object routeValues)
{
return AbsolutePath(urlHelper,
urlHelper.Action(actionName,
controllerName, routeValues));
}
}