for my WebAPI OData application, im trying to give my client (browser) the decision what format the data output should be. as $format is not implemented yet in WebAPI OData, im using Raghuramn's example here: https://gist.github.com/raghuramn/5556691
var queryParams = request.GetQueryNameValuePairs();
var dollarFormat = queryParams.Where(kvp => kvp.Key == "$format").Select(kvp => kvp.Value).FirstOrDefault();
if (dollarFormat != null)
{
request.Headers.Accept.Clear();
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse(dollarFormat));
// remove $format from the request.
request.Properties[HttpPropertyKeys.RequestQueryNameValuePairsKey] = queryParams.Where(kvp => kvp.Key != "$format");
}
This works for JSON ($format=application/json;odata=fullmetadata) and JSON light (format=application/json;odata=light) but so far not for xml.
if i add $format=application/XML to the querystring, it still outputs to json light. how do i force XML output?
EDIT:
even if i force xml in Fiddler by sending Content-type: application/xml and Accept: application/xml with the request, the response simply lists: Content-Type: application/json; odata=minimalmetadata; streaming=true; charset=utf-8
EDIT 2:
Accept: application/atom+xml does seem to output xml in the raw response. Unfortunately, "application/atom+xml" throws a FormatException in:
request.Headers.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/atom+xml"));
setting the request ContentType instead of the AcceptHeader did the trick:
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/atom+xml");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With