c# - HttpClient 获取同一网站内的数据

标签 c# asp.net-mvc asp.net-web-api asp.net-web-api2

我正在尝试使用 HttpClient 调用同一网站下的 Web API 端点。

我当前的 iis 设置如下 -

Main Website 
    - Application1
    - WebApiApp

我正在尝试从 Application1 调用 WebApiApp 中使用 HttpClient 的 Web API Controller 。如果我在下面的代码中指定 m_service 的完整 url,它就可以工作-

using (HttpResponseMessage serviceResponse = await Client.GetAsync(new Uri(m_service + serviceEndPoint), HttpCompletionOption.ResponseHeadersRead))
                {
                    return CreateResponse(serviceResponse);
                }

由于这个应用程序在同一个网站下,我想使用相对路径从 web api 获取数据。我尝试这样做的原因是,该网站在多个网络服务器上运行,并且正在使用网络负载平衡器。为 WebApiApp Controller 使用完整的 url 会增加通过负载均衡器的额外开销。我想在同一台服务器上访问 web api 服务。

如果您需要更多详细信息,请告诉我。谢谢您的帮助!

最佳答案

您必须为 HTTP 请求提供基地址才能工作(我以为您已经准备好了)。只有相对 URI 不是有效的 URL

API 是否在同一个站点下并不重要,Web 客户端将需要请求的完整 URL。因此,在您的情况下,您可以在基地址中设置 localhost。这是来自 http://www.asp.net/web-api/overview/advanced/calling-a-web-api-from-a-net-client 的示例代码.

using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:9000/");

    // code removed

    HttpResponseMessage response = await client.GetAsync("api/products/1");
    if (response.IsSuccessStatusCode)
    {
        // do something
    }
}

关于c# - HttpClient 获取同一网站内的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33359303/

相关文章:

c# - 在 webbrowser 上获取函数 javascript 的返回值

c# - 无法使用 Gtk Builder 加载 glade 文件。 Gtk3#

c# - 401 上的自定义 [授权] 消息

c# - 您可以在同一个 Web API Controller 中使用 2 个具有不同参数类型的 GET 方法吗?

c# - 从客户端应用程序调用 Web API

c# - 我如何按字符串属性而不是按字母顺序排序

c# - 枚举所有 IEnumerable

asp.net-mvc - 如何创建将 IEnumerable<T> 绑定(bind)到表的 HtmlHelper 扩展方法

javascript - MVC asp.net,从文本框中获取数据到 View 中的javascript函数

c# - 如何避免在布局页面中使用 "using System.Web.Optimization"