我知道可以Url.Link()
用来获取特定路由的URL,但是如何在Web API控制器中获取Web API基本URL?
Answers:
您可以使用()中的VirtualPathRoot
属性HttpRequestContext
request.GetRequestContext().VirtualPathRoot
using (WebApp.Start<Program>("http://localhost:9095/Test"))
VirtualPathRoot返回/Test
)
http://localhost:5550/
并正确返回/
。我的意思是http://localhost:5550/
在这种情况下如何获得...
Request.RequestUri
),因此可以获取它的请求uri并找到方案,主机和端口...对吗?
在对网址的请求的操作方法“ http:// localhost:85458 / api / ctrl / ”中
var baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) ;
这是我用的:
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
首先,您使用来获得完整的URL,
HttpContext.Current.Request.Url.ToString();
然后使用Replace(“ user / login”,“”)来替换方法url。
完整的代码将是
string host = HttpContext.Current.Request.Url.ToString().Replace("user/login", "")
在ASP.NET Core中,ApiController
该Request
属性仅是消息。但是仍然Context.Request
可以从中获得期望的信息。我个人使用此扩展方法:
public static string GetBaseUrl(this HttpRequest request)
{
// SSL offloading
var scheme = request.Host.Host.Contains("localhost") ? request.Scheme : "https";
return $"{scheme}://{request.Host}{request.PathBase}";
}
不知道这是否是Web API 2的补充,但RequestContext
是否具有以下Url
属性UrlHelper
:HttpRequestContext Properties。它具有Link
和Content
方法。详情在这里
添加对System.Web的引用
using System.Web;
获取主机或所需的URL的任何其他组件
string host = HttpContext.Current.Request.Url.Host;
从 HttpRequestMessage
request.Headers.Host
Request.GetRequestContext().VirtualPathRoot
返回/
。我使用Owin在Windows服务的本地主机上自托管Web API。在这种情况下有什么方法可以获取基本URL?谢谢。