让 WebAPI 控制器向另一个 REST 服务发送 http 请求

Have a WebAPI Controller send an http request to another REST service

我正在创建 WebAPI 服务,我希望它将所有传入请求 (GET,POST) 重定向到外部 REST 服务并 return 响应 (Json/html)对我的 WebAPI 的原始请求。

执行此操作的最佳方法是什么? HttpResponseMessage 或 HttpWebResponse

    [HttpGet]
    [Route("api/Geocoder")]
    public HttpWebResponse GetCandidates(string query)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://externalRestService.com/arcgis/rest/services/Geocode" + query);

        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        return response;

    }

我也试过了

    [HttpGet]
    public HttpResponseMessage Get()
    {
        try
        {
            HttpClient httpClient = new HttpClient()
            {
                BaseAddress = new Uri(""https://externalRestService.com/arcgis/rest/services/Geocode")
            };

            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            response = httpClient.GetAsync(requestUrl).Result;
            return response;
        }
        catch
        {
            return new HttpResponseMessage()
            {
                StatusCode = HttpStatusCode.InternalServerError,
                ReasonPhrase = "Internal Server Error"
            };
        }

    }

在此先感谢您的帮助。我是 .Net Core 和 webapis 的新手

以下方法对我有用。

public async Task<IHttpActionResult> GET(string query)
    {
        string _apiUrl = "http://foo.com/rest/services/Geocode?"; 
        string _baseAddress = "http://foo.com/rest/services/Geocode?";

        using (var client = new HttpClient())
        {
            client.BaseAddress = new Uri(_baseAddress);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var responseMessage = await client.GetAsync(_apiUrl + query);

            if (responseMessage.IsSuccessStatusCode)
            {
                var response = Request.CreateResponse(HttpStatusCode.OK);
                response.Content = responseMessage.Content;
                return ResponseMessage(response);
            }
        }
        return NotFound();
    }