Return HttpResponseMessage with XML data

16,267

You could wrap the result in a root element:

[HttpGet]
public HttpResponseMessage GetPerson(int personId)
{
    var doc = XDocument.Load(path);
    var result = doc
        .Element("Persons")
        .Elements("Person")
        .Single(x => (int)x.Element("PersonID") == personId);

    var xml = new XElement("TheRootNode", result).ToString();
    return new HttpResponseMessage 
    { 
        Content = new StringContent(xml, Encoding.UTF8, "application/xml") 
    };
}
Share:
16,267
tempid
Author by

tempid

Updated on June 18, 2022

Comments

  • tempid
    tempid almost 2 years

    I've created a WebAPI using .NET. The API reads/writes data from an xml file. I have the following code and it returns the matching elements without a root element. How do I make it return with root?

    API Controller:

     [HttpGet]
     public HttpResponseMessage GetPerson(int personId)
     {
        var doc = XDocument.Load(path);
        var result = doc.Element("Persons")
               .Elements("Person")
               .Single(x => (int)x.Element("PersonID") == personId);
    
        return new HttpResponseMessage() { Content = new StringContent(string.Concat(result), Encoding.UTF8, "application/xml") };
     }
    

    Result:

    <Person>
      <PersonID>1</PersonID>
      <UserName>b</UserName>
      <Thumbnail />
    </Person><Person>
      <PersonID>2</PersonID>
      <UserName>b</UserName>
      <Thumbnail />
    </Person><Person>
      <PersonID>4</PersonID>
      <UserName>a</UserName>
      <Thumbnail>a</Thumbnail>
    </Person>