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

问题描述 投票:63回答:14

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

url asp.net-web-api base-url asp.net-web-api2
14个回答
42
投票

你可以使用VirtualPathRootHttpRequestContext)的request.GetRequestContext().VirtualPathRoot属性


1
投票

根据Athadu的回答,我编写了一个扩展方法,然后在Controller类中,你可以通过this.RootUrl();获得根URL

public static class ControllerHelper
{
    public static string RootUrl(this ApiController controller)
    {
        return controller.Url.Content("~/");
    }
}

0
投票

发送GET到页面,回复的内容将是答案。基本网址:http://website/api/


0
投票

在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}";
}

-1
投票

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


-1
投票

来自HttpRequestMessage

request.Headers.Host

72
投票

在对URL“http://localhost:85458/api/ctrl/”的请求的动作方法中

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

这会让你http://localhost:85458


32
投票
Url.Content("~/")

为我工作!


13
投票

这是我使用的:

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

10
投票

我将此服务注入我的控制器。

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

}

8
投票

使用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


3
投票
new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)

2
投票

首先,您使用HttpContext.Current.Request.Url.ToString();获取完整的URL,然后使用Replace(“user / login”,“”)替换您的方法URL。

完整的代码将是

string host = HttpContext.Current.Request.Url.ToString().Replace("user/login", "")

1
投票

不确定这是否是Web API 2添加,但RequestContextUrl属性,这是UrlHelperHttpRequestContext Properties。它有LinkContent方法。详情here

© www.soinside.com 2019 - 2024. All rights reserved.