簡體   English   中英

ASP.Net Web APi C#-GetAsync不返回XML響應內容

[英]ASP.Net Web APi C# - GetAsync not returning XML response content

我正在使用GetAsync()調用外部服務,並在查詢字符串中傳遞參數。 當我檢查響應中的內容時,我看不到任何返回的內容,但是它返回200 OK並且在提琴手中它正確地向我返回了XML響應。 我需要XML響應才能反序列化為C#對象,然后將其進一步保存到DB。

嘗試過的事情:

1)通過在global- app_start()中添加此設置進行了嘗試,這沒有幫助

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

2)創建了一個對象,並嘗試通過GetAysnc發送該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. 發生 <SHIPMENTS xmlns=''> was not expected.

任何幫助對此表示感謝。

謝謝,WH

這對我有用-

var client = new HttpClient();
var data = client.GetStringAsync("http://my.yrc.com/dynamic/national/servlet?CONTROLLER=com.rdwy.ec.rextracking.http.controller.PublicTrailerHistoryAPIController&xml=Y&PRONumber=82040X,03117X").Result;
var ser = new XmlSerializer(typeof(Shipments));
var t = (Shipments)ser.Deserialize(new StringReader(data));


public class Shipment
{
    public string returnCode { get; set; }
    public string returnMessage { get; set; }
    public string freightBillNumber { get; set; }
    //props
}

[XmlRoot(ElementName = "SHIPMENTS")]
public class Shipments
{
    [XmlElement(ElementName = "SHIPMENT")]
    public List<Shipment> SHIPMENT { get; set; }
}

編輯

這也很好-

var data = client.GetStreamAsync("http://my.yrc.com/dynamic/national/servlet?CONTROLLER=com.rdwy.ec.rextracking.http.controller.PublicTrailerHistoryAPIController&xml=Y&PRONumber=82040X,03117X").Result;

編輯

效果很好-

var client = new HttpClient();
var data = client.GetAsync("http://my.yrc.com/dynamic/national/servlet?CONTROLLER=com.rdwy.ec.rextracking.http.controller.PublicTrailerHistoryAPIController&xml=Y&PRONumber=82040X,03117X").Result;

var ser = new XmlSerializer(typeof(Shipments));
var t = (Shipments)ser.Deserialize(data.Content.ReadAsStreamAsync().Result);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM