Excel expects an XML service doc, but it doesn't send any Accept header. By default ASP.NET Web API OData sends back a JSON service doc when no Accept header is specified. As a result you cannot consume a default ASP.NET Web API OData service using Excel.
We should switch our default format for service documents to be XML.
Comments: This message handler worked for me. It specifically deals with PowerPivot but could be made more generic for your needs: ``` public class MissingAcceptHeaderHandler : DelegatingHandler { protected async override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { if (request.Headers.Accept.Count == 0) { if (request.Headers.UserAgent.Any(ua => ua.Product != null && ua.Product.Name == "PowerPivot")) { request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/atom+xml")); } } var response = await base.SendAsync(request, cancellationToken); return response; } } ```
We should switch our default format for service documents to be XML.
Comments: This message handler worked for me. It specifically deals with PowerPivot but could be made more generic for your needs: ``` public class MissingAcceptHeaderHandler : DelegatingHandler { protected async override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request, CancellationToken cancellationToken) { if (request.Headers.Accept.Count == 0) { if (request.Headers.UserAgent.Any(ua => ua.Product != null && ua.Product.Name == "PowerPivot")) { request.Headers.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/atom+xml")); } } var response = await base.SendAsync(request, cancellationToken); return response; } } ```