如何在Web API控制器中获取基本URL?

我知道我可以使用Url.Link()获取特定路由的URL,但是如何在Web API控制器中获取Web API基本URL?

您可以使用HttpRequestContextrequest.GetRequestContext().VirtualPathRoot )中的VirtualPathRoot属性,

在请求到url的操作方法“ http:// localhost:85458 / api / ctrl / ”

 var baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) ; 

这会得到你http:// localhost:85458

 Url.Content("~/") 

为我工作!

我把这个服务注入到我的控制器中。

  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); } } 

这是我使用的:

 Uri baseUri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, String.Empty)); 

然后当我将它与另一个相对path结合时,我使用以下内容:

 string resourceRelative = "~http://img.dovov.commyImage.jpg"; Uri resourceFullPath = new Uri(baseUri, VirtualPathUtility.ToAbsolute(resourceRelative)); 

使用Url助手类中的以下片段

 Url.Link("DefaultApi", new { controller = "Person", id = person.Id }) 

完整的文章可以在这里find: http : //blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx

这是不需要任何帮手或解决方法的官方方式。 如果你看这个方法就像ASP.NET MVC

 new Uri(Request.RequestUri, RequestContext.VirtualPathRoot) 

不知道这是否是一个Web API 2另外,但RequestContext有一个Url属性,它是一个UrlHelper : HttpRequestContext属性 。 它有LinkContent方法。 详情在这里

发送GET到一个页面,回复的内容将是答案。基地url: http://website/api/

来自HttpRequestMessage

 request.Headers.Host 

Al WebApi 2,只是调用HttpContext.Current.Request.Path;