簡體   English   中英

使用REST API返回XML文檔

[英]Return XML document with REST API

我想從rest api請求返回一個xml文檔:

[HttpPost]
public string getClassXml(HttpRequestMessage req)
{
     var response = Request.CreateResponse(HttpStatusCode.OK);
     var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
     ClassXML classid = new ClassXML();
     XmlDocument doc = new XmlDocument();

     try
     {
         var data = req.Content.ReadAsStringAsync().Result;
         classid = serializer.Deserialize<ClassXML>(data.ToString().Trim());
     }
     catch (Exception ex)
     { 
         throw new Exception(ex.Message);
     }

     string path = ASDb.ReadValue("SELECT definitionxml FROM alclass WHERE classid='" + classid.classID + "'").ToString();

     XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\" + percorso);
     reader.Read();
     doc.Load(reader);

     return doc.innerXml;
}

但是通過這種方式,我得到了一個字符串,我想擁有一個XmlDocument而不是一個字符串。 我也嘗試返回XmlDocument文檔,但是它給了我一個錯誤:“ ObjectContent`1”類型未能序列化內容類型“ application / xml”的響應主體; charset = utf-8'。 你有什么想法?

正如有人在幾秒鍾前在這里寫的(但隨后刪除了他的答案)那樣,問題是XmlDocument無法序列化,如果您使用XmlElement則可以。 這是我所做的:

[HttpPost]
public XmlElement getClassXml(HttpRequestMessage req)
{
    var response = Request.CreateResponse(HttpStatusCode.OK);
    var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
    ClassXML classid = new ClassXML();
    XmlDocument doc = new XmlDocument();

    try
    {
        var data = req.Content.ReadAsStringAsync().Result;
        classid = serializer.Deserialize<ClassXML>(data.ToString().Trim());
    }
    catch (Exception ex)
    { 
        throw new Exception(ex.Message);
    }

    string path = ASDb.ReadValue("SELECT definitionxml FROM alclass WHERE classid='" + classid.classID + "'").ToString();

     XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\" + percorso);
     reader.Read();
     doc.Load(reader);
     XmlElement element = doc.DocumentElement;

     return element;
}

也許問題不在於您的API層,而是當您嘗試使用XmlTextReader時?

XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\\\" + percorso);

您嘗試讀取的XML是什么樣的? 您檢查過格式是否正確?

關於“使用REST API返回XML文檔”,我建議您僅將XML文檔輸出為具有適當MIME類型的字符串,方法如下:

[HttpPost]
public HttpResponseMessage getClassXml(HttpRequestMessage req)
{

     ...

     XmlTextReader reader = new XmlTextReader(AppDomain.CurrentDomain.BaseDirectory + "Resource\\" + percorso);
     reader.Read();
     doc.Load(reader);

     HttpResponseMessage response = new HttpResponseMessage { Content = new StringContent(doc.innerXml, Encoding.UTF8,"application/xml") };
     return response;
}

REST API輸出應映射到標准的Internet MIME類型(例如JSON數據,圖像,文本等,而不是XmlDocument)。 無論使用哪種REST API,只要有必要,就可以獲取文本並將其轉換為XmlDocument。

順便說一句,您似乎甚至沒有使用所提供示例中的一半代碼,並且可以清理它:

string path = ASDb.ReadValue("SELECT definitionxml FROM alclass WHERE classid='" + classid.classID + "'").ToString();

抱歉,但是如果我現在想從HttpPost更改為HttpGet,如何在以下URL中獲取參數: http://localhost/arcosat/api/ws/GetClassXml?classid=myclass我想獲取“ myclass”字符串,但是與req.Content.ReadAsStringAsync().Result不再起作用

暫無
暫無

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

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