在APIController方法中返回一个HttpResponse,该方法调用不同的API

时间:2016-09-28 06:56:33

标签: asp.net-web-api httprequest httpresponse asp.net-apicontroller

我有一个APIController方法如下。基本上我需要验证API响应。所以它是API调用中的API调用。

   public class DCController : ApiController
    {    
        [HttpPost]
        public HttpResponseMessage SampleMethod(string url)
        {

            var uri = new Uri(url);

            var baseAddress = uri.GetLeftPart(System.UriPartial.Authority);
            var apiAddress = url.Replace(baseAddress + "/", "");

            var responseString = string.Empty;

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(baseAddress);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                var response = client.GetAsync(apiAddress).Result;
                if (response.IsSuccessStatusCode)
                {
                    responseString = response.Content.ReadAsStringAsync().Result;
                }
            }


            if (!string.IsNullOrEmpty(responseString) && responseString.ToString().Validate())
            {

                return Request.CreateResponse(HttpStatusCode.OK, "Validated");
            }
            else
            {
                return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid");
            }
        }

问题: 1.请求对象在返回行中为空。 2.如果我尝试创建请求对象 -

var request = new HttpRequestMessage();

它抛出以下错误:

  

发生了'System.InvalidOperationException'类型的异常   System.Web.Http.dll但未在用户代码中处理

     

其他信息:请求没有关联   配置对象或提供的配置为空。

不确定我需要添加哪些设置。我对使用API​​相对较新。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

我可以通过以下代码来实现它 -

 [HttpPost]
        public HttpResponseMessage Get(string url)
        {
            string responseString = GetWebApiData(url); //Extracted the method

            HttpResponseMessage response = new HttpResponseMessage();

            if (!string.IsNullOrEmpty(responseString) && responseString.ToString().Validate())
            {
                response.ReasonPhrase = "Valid";
                response.StatusCode = HttpStatusCode.OK;
            }
            else
            {
                response.ReasonPhrase = "Invalid";
                response.StatusCode = HttpStatusCode.BadRequest;
            }

            return response;
        }