在调用不同 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
用户(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 错误