【发布时间】:2016-01-24 16:50:03
【问题描述】:
我正在使用GetAsync() 调用外部服务并在查询字符串中传递参数。当我检查响应中的内容时,我没有看到任何返回,但是它返回 200 OK 并且在提琴手中它正确地返回了 XML 响应。我需要 XML 响应来反序列化为 C# 对象,然后将其进一步保存到 DB。
尝试过的事情:
1) 尝试在 global-app_start() 中添加此设置,但没有帮助
GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;
2) 创建了一个对象并尝试通过GetAysnc 发送它,但也没有用。
public class Request
{
[XmlElement]
public string XML { get; set; }
[XmlElement]
public List<string> ProNumber { get; set; }
}
2) 我应该尝试在查询字符串中传递参数并期待 json 结果吗?如果我将 mediatyperformatter 添加到application/json?
这是我的代码:
public async Task<HttpResponseMessage> GetData()
{
string requestString = "&xml=Y&PRONumber=82040X,03117X";
string result = "";
string url = @"http://my.yrc.com/dynamic/national/servlet?CONTROLLER=com.rdwy.ec.rextracking.http.controller.PublicTrailerHistoryAPIController";
try
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri(url);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));
HttpResponseMessage response = await client.GetAsync(url+requestString);
if (response.IsSuccessStatusCode)
{
return response;
}
}
}
catch (Exception ex)
{
result = ex.Message;
}
return null;
}
编辑:
Shipments scp = null;
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "Shipment";
xRoot.IsNullable = true;
XmlSerializer serializer = new XmlSerializer(typeof(Shipment), xRoot);
using (Stream stream = response.Content.ReadAsStreamAsync().Result)
{
scp = (Shipments)serializer.Deserialize(stream);
}
型号:
public class Shipments
{
[XmlArrayItem(Type = typeof(Shipment))]
public Shipment[] Shipment;
}
public class Shipment
{
[XmlAttribute()]
public int returnCode { get; set; }
.................
..............
出现错误:<SHIPMENTS xmlns=''> was not expected.
非常感谢您对此的任何帮助。
谢谢, WH
【问题讨论】:
-
您可能在多个数据包中获取数据,而 200 响应是最后一个数据包。在提琴手中验证数据是否在前一个数据包中。如果您仍然遇到问题,请使用 IE 并手动转到 URL 并使用 fiddler 捕获结果并与您的 C# 应用程序进行比较。
-
对我来说很好。你在用
response.Content做什么?您需要拨打ReadAsStreamAsync或其他方法之一, -
@CharlesMager- 尝试但收到错误反序列化 XML 错误:{“
不是预期的。”}
标签: c# xml web-services asp.net-web-api httpclient