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

时间:2013-11-08 18:35:34

标签: url asp.net-web-api base-url asp.net-web-api2

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

16 个答案:

答案 0 :(得分:70)

在对网址的请求的操作方法" http://localhost:85458/api/ctrl/"

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

这会让你http://localhost:85458

答案 1 :(得分:42)

您可以使用VirtualPathRootHttpRequestContext

中的request.GetRequestContext().VirtualPathRoot属性

答案 2 :(得分:31)

select * from `reservations` where `reservation_from` between '2015-10-29' and '2015-10-29' and `rooms.type` = "test"

为我工作!

答案 3 :(得分: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));

答案 4 :(得分: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);
    }

}

答案 5 :(得分: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

答案 6 :(得分:3)

new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)

答案 7 :(得分:2)

在.NET Core WebAPI(版本3.0及更高版本)中:

// dummyElement.styled.js file

export const dummyElement = styled.a`
  font-size: 20px;
`; // Styles all the dummyElements, how to style them individually?



// dummyElement.JSX file 

import { dummyElement } from "./dummyElement.styled";

<>
  props.dummyArray.map((current, index) => (
    <dummyElement
      key={index}
      href={"https://dummywebsite/" + current.value}
    >
      {current.value}
    </dummyElement>
  ))
</>

答案 8 :(得分:1)

不确定这是否是添加了Web API 2,但RequestContext的{​​{1}}属性为UrlHttpRequestContext Properties。它有UrlHelperLink方法。详情here

答案 9 :(得分:1)

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

完整代码将是

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

答案 10 :(得分:1)

根据Athadu的回答,我编写了一个扩展方法,然后在Controller类中,您可以通过 Claim.find() .then(claims => { context.res = { status: 200, headers: { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' }, body: JSON.parse(JSON.stringify(claims)) }; context.done(); })

获取根URL
this.RootUrl();

答案 11 :(得分:0)

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

答案 12 :(得分: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}";
}

答案 13 :(得分:0)

  1. 添加对System.Web的引用 using System.Web;

  2. 获取主机或所需的URL的任何其他组件 string host = HttpContext.Current.Request.Url.Host;

答案 14 :(得分:-1)

来自HttpRequestMessage

request.Headers.Host

答案 15 :(得分:-1)

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