我使用GetAsync()
调用外部服务并在查询字符串中传递参数。当我查看响应中的内容时,我没有看到任何返回的内容,但它返回200 OK
,并在提琴手中正确返回了XML响应。我需要XML响应来反序列化为一个C#对象,然后再将其保存到数据库。ASP.Net Web APi C# - GetAsync不返回XML响应内容
事情尝试:
1)试过这种通过增加全球 - 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#应用程序进行比较。 – jdweng
适合我。你用'response.Content'做什么?您需要调用'ReadAsStreamAsync'或其他方法之一, –
@ CharlesMager-试过但得到错误 解除序列化XML的错误:{“不是预期的。”} –
Kanchana