Как получить базовый URL в Web API controller?
Я знаю, что могу использовать Url.Link()
чтобы получить URL-адрес определенного маршрута, но как я могу получить базовый URL-адрес Web API в контроллере Web API?
13 ответов:
вы могли бы использовать
VirtualPathRoot
собственность отHttpRequestContext
(request.GetRequestContext().VirtualPathRoot
)
в методе действия запроса к url"http://localhost:85458/api/ctrl/"
var baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) ;
это поможет вам http://localhost:85458
вот что я использую:
Uri baseUri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, String.Empty));
затем, когда я объединяю его с другим относительный путь, Я использую следующий:
string resourceRelative = "~/images/myImage.jpg"; Uri resourceFullPath = new Uri(baseUri, VirtualPathUtility.ToAbsolute(resourceRelative));
Я ввожу эту службу в мои контроллеры.
public class LinkFactory : ILinkFactory { private readonly HttpRequestMessage _requestMessage; private readonly string _virtualPathRoot; public LinkFactory(HttpRequestMessage requestMessage) { _requestMessage = requestMessage; var configuration = _requestMessage.Properties[HttpPropertyKeys.HttpConfigurationKey] as HttpConfiguration; _virtualPathRoot = configuration.VirtualPathRoot; if (!_virtualPathRoot.EndsWith("/")) { _virtualPathRoot += "/"; } } public Uri ResolveApplicationUri(Uri relativeUri) { return new Uri(new Uri(new Uri(_requestMessage.RequestUri.GetLeftPart(UriPartial.Authority)), _virtualPathRoot), relativeUri); } }
используйте следующий фрагмент из вспомогательного класса Url
Url.Link("DefaultApi", new { controller = "Person", id = person.Id })
Полная статья доступна здесь: http://blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx
это официальный способ, который не требует какого-либо помощника или обходного пути. Если вы посмотрите на этот подход, это похоже ASP.NET MVC
не уверен, что это дополнение Web API 2, но
RequestContext
естьUrl
свойство, которое являетсяUrlHelper
: Свойства HttpRequestContext. Он имеетLink
иContent
методы. Подробности здесь
сначала вы получаете полный URL с помощью
HttpContext.Current.Request.Url.ToString();
затем замените url-адрес метода с помощью Replace ("user/login","").полный код будет
string host = HttpContext.Current.Request.Url.ToString().Replace("user/login", "")