如何在Web API控制器中获取基本URL?
我知道我可以使用Url.Link()
获取特定路由的URL,但是如何在Web API控制器中获取Web API基本URL?
您可以使用HttpRequestContext
( request.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属性 。 它有Link
和Content
方法。 详情在这里
发送GET
到一个页面,回复的内容将是答案。基地url: http://website/api/
来自HttpRequestMessage
request.Headers.Host
Al WebApi 2,只是调用HttpContext.Current.Request.Path;
- 使用Volley和不使用HttpEntity的POST多部分请求
- 在apicontroller中无法从OwinContext获取UserManager
- “Access-Control-Allow-Origin”标题包含多个值
- Java完成非零退出值2 – Android Gradle
- 如何在HttpClient的HttpRequestMessage上设置一个cookie
- 在Asp.Net的/ bin文件夹中,Roslyn“需要”什么/为什么?
- 如何将json POST数据作为对象传递给Web API方法?
- 需要将asp.net webapi 2请求和响应正文logging到数据库中
- ServiceStack与ASP.Net Web API