【问题标题】:Return an HttpResponse in an APIController Method which calls a different API在调用不同 API 的 APIController 方法中返回 HttpResponse
【发布时间】:2017-02-05 23:54:01
【问题描述】:

我有一个 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 比较陌生。任何帮助表示赞赏。

【问题讨论】:

  • 您在实际运行代码或单元测试时是否遇到该错误?
  • 您还应该考虑使该方法异步/等待
  • @nkosi 我通过 ajax 查询调用 API 方法,方法是保持 API 项目通过 localhost 运行并通过 localhost:portnumber URL 调用 API 方法...我收到此错误,因为它需要我API 项目调试器..希望这是有道理的...
  • @Nkosi 我会研究 async/await ..
  • 您还应该检查您的启动以确保您已正确配置 HttpConfiguration

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


【解决方案1】:

我可以通过下面的代码让它工作-

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

【讨论】:

    猜你喜欢
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2019-02-11
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多