【发布时间】:2016-11-25 03:24:18
【问题描述】:
我创建了一个控制器和方法,用于从 API 获取数据。
我使用HttpResponseMessage 来获得回复。一切正常,但我无法以 JSON 格式获得我想要的确切数据。
方法如下:
public class TestController : ApiController
{
[HttpGet]
public async Task<IHttpActionResult> TestMethod(...)
{
string _apiUrl = String.Format("...");
string _baseAddress = "...";
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(_baseAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.GetAsync(_apiUrl);
if (response.IsSuccessStatusCode)
{
return Json(response);
}
}
return NotFound();
}
}
我得到的响应如下:
{
"Version": {
"Major": 1,
"Minor": 1,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"Content": {
"Headers": [
{
"Key": "Content-Length",
"Value": [
"359"
]
},
{
"Key": "Content-Type",
"Value": [
"application/json; charset=utf-8"
]
},
{
"Key": "Expires",
"Value": [
"-1"
]
}
]
},
"StatusCode": 200,
"ReasonPhrase": "OK",
"Headers": [
{
"Key": "Pragma",
"Value": [
"no-cache"
]
},
{
"Key": "X-SourceFiles",
"Value": ["..."
]
},
{
"Key": "Cache-Control",
"Value": [
"no-cache"
]
},
{
"Key": "Date",
"Value": [
"Thu, 21 Jul 2016 13:25:54 GMT"
]
},
{
"Key": "Server",
"Value": [
"Microsoft-IIS/10.0"
]
},
{
"Key": "X-AspNet-Version",
"Value": [
"4.0.30319"
]
},
{
"Key": "X-Powered-By",
"Value": [
"ASP.NET"
]
}
],
"RequestMessage": {
"Version": {
"Major": 1,
"Minor": 1,
"Build": -1,
"Revision": -1,
"MajorRevision": -1,
"MinorRevision": -1
},
"Content": null,
"Method": {
"Method": "GET"
},
"RequestUri": "...",
"Headers": [
{
"Key": "Accept",
"Value": [
"application/json"
]
}
],
"Properties": {}
},
"IsSuccessStatusCode": true
}
但通常情况下,API 返回此值(xml 格式):
<License>
<Existing>
<Amount>0</Amount>
<Quantity>0</Quantity>
<UnitAmount>0</UnitAmount>
</Existing>
<New>
<Amount>400</Amount>
<Quantity>50</Quantity>
<UnitAmount>8</UnitAmount>
</New>
<Result>
<Amount>400</Amount>
<Quantity>50</Quantity>
<UnitAmount>8</UnitAmount>
</Result>
</License>
<PartnerDiscount i:nil="true"/>
</CalculatorResult>
如何从 API 请求中提取这些值。如果我从 API 响应中执行 "RequestUri",我会得到准确的数据。
我错过了什么?
【问题讨论】:
-
您不想序列化整个响应,只需序列化
response.Content。显然,在这种情况下它是空的,所以其他东西也一定是错的...... -
当我使用 response.Content 我得到这个值:{"Headers":[{"Key":"Content-Length","Value":["359"]},{"Key ":"Content-Type","Value":["application/json; charset=utf-8"]},{"Key":"Expires","Value":["-1"]}]}
-
您正在从 API 返回整个 HTTP 响应。您究竟想对 XML 响应做什么?将其转换为 JSON 并返回?
-
@CodeCaster 是的,完全正确。
标签: c# json xml asp.net-mvc httpresponse