在调用不同 API 的 APIController 方法中返回 HttpResponse

Posted

技术标签:

【中文标题】在调用不同 API 的 APIController 方法中返回 HttpResponse【英文标题】:Return an HttpResponse in an APIController Method which calls a different API 【发布时间】: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 【参考方案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;
        

【讨论】:

以上是关于在调用不同 API 的 APIController 方法中返回 HttpResponse的主要内容,如果未能解决你的问题,请参考以下文章

转如何在Web项目中给没有添加API核心组件添加APIController的帮助页HelpPage

控制器ApiController上未找到任何操作

用户(IPrincipal)在使用 Web Api 2.1 和 Owin 的 ApiController 的构造函数中不可用

如何在Web项目中给没有添加API核心组件添加APIController的帮助页HelpPage

ASP.NET Web API 的 Castle Windsor ApiController Factory 实现

C# WebClient 使用 UploadString 从 ApiController 调用 HttpPost 方法也在 C# 中。 415 或 400 错误