我正在向返回JSON数据的路由发出POST请求。
[HttpPost("api/v1/testGetAll")]
public object Test([FromBody]object filteringOptions)
{
return myService.GetLogs(filteringOptions).ToArray();
}
路由工作正常,过滤工作正常,当我在Postman中测试路由时,我得到了正确的响应。但是这只是一个后端,我想从我的自定义API网关调用此路由。
我面临的问题是回复确切的回复。相反,我获得成功状态,标题,版本,请求消息等。
public object TestGetAll(string ApiRoute, T json)
{
Task<HttpResponseMessage> response;
var url = ApiHome + ApiRoute;
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
try
{
response = client.PostAsync(url, new StringContent(json.ToString(), Encoding.UTF8, "application/json"));
return response.Result;
}
catch (Exception e)
{
...
}
}
}
如何获得确切的内容?
答案 0 :(得分:4)
您需要阅读回复中的内容。
var contentString = response.Result.Content.ReadAsStringAsync().Result;
如果愿意,可以将字符串响应反序列化为要返回的对象。
public async Task<TResult> TestGetAll<TResult>(string apiRoute, string json)
{
// For simplicity I've left out the using, but assume it in your code.
var response = await client.PostAsJsonAsync(url, json);
var resultString = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<TResult>(resultString);
return result;
}
答案 1 :(得分:1)
您必须将响应作为HttpResponseMessage返回。
尝试将return语句更改为
[HttpPost("api/v1/testGetAll")]
public IHttpActionResult Test([FromBody]object filteringOptions)
{
return Ok(myService.GetLogs(filteringOptions).ToArray());
}
请注意:这将返回状态代码为200的响应。如果您想根据不同的响应代码处理响应。您可以像这样创建HttpResponseMessage -
Request.CreateResponse<T>(HttpStatusCode.OK, someObject); //success, code- 200
Request.CreateResponse<T>(HttpStatusCode.NotFound, someObject); //error, code- 404
T是您的对象类型。
等等......