Я переношу веб-службу на ASP.NET Web Api 2 и сталкиваюсь с проблемой почти на первом же препятствии.
Я хочу сделать это:
public class SomeController : ApiController
{
[Route("some\url")]
public object Get()
{
return { Message = "Hello" };
}
}
И иметь возможность запрашивать у службы «application/json» или «application/xml» (или любой другой возможный формат, например Message Pack) и получать сериализованный ответ. Но, кажется, это работает только для JSON.
Я прочитал это и видел документация, в которой четко указано, что инфраструктура не может обрабатывать сериализацию анонимных типов в XML (серьезно) и что решение состоит в том, чтобы не использовать XML (серьезно).
Когда я пытаюсь вызвать это и запросить XML в качестве типа ответа, я получаю
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
Я не удаляю поддержку для клиентов, желающих запросить XML, но я действительно не могу найти обходной путь для этого - что я могу сделать?
Изменить
Я добавил это:
System.Web.Http.GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
config.Formatters.Insert(0, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
config.Formatters.Insert(0, new System.Net.Http.Formatting.XmlMediaTypeFormatter());
согласно ответу Далорзо, но это не имело значения.
Для пояснения, служба работает абсолютно нормально, когда я вызываю ее, используя заголовок accept application/json
, но бомбит, когда я вызываю ее с заголовком accept application/xml
.