2016-11-30 2 views
0

В запросе на управление контроллером web api 2 с полем заголовка «Accept: application/xml».Выбор сериализатора Web API 2

public class ConverterController : ApiController 
{ 
    class A {} 
    public class B {} 
    public class C : Exception {} 

    public IHttpActionResult Action() 
    { 
     var res = Request.CreateResponse(HttpStatusCode.Ok, new A()); 
     // res.Content.Headers.ContentType.MediaType == "application/json" 

     var res = Request.CreateResponse(HttpStatusCode.Ok, new B()); 
     // res.Content.Headers.ContentType.MediaType == "application/xml" 

     var res = Request.CreateResponse(HttpStatusCode.Ok, new C()); 
     // res.Content.Headers.ContentType.MediaType == "application/json" 
    } 
} 

Почему класс A и C сериализуется в json?

+0

Формат ответа зависит от запроса 'Accept' заголовка – Fabio

+0

Это Accept: приложение/XML – Jonas

+0

Не совсем,' Accept' заголовок для обсуждения содержимого, что означает, что сервер возвращает ответ с запрошенным типом MIME только если он доступен, в противном случае он вернет свое значение по умолчанию. –

ответ

1

Оказывается, при возникновении исключения в XML-сериализаторе web api 2 тихо возвращается к сериализатору JSON. Благодаря AarónBC для подсказки, которая должна заставить XML-сериализатор получить исключение сериализации.

var res = Request.CreateResponse(HttpStatusCode.OK, new C(), Configuration.Formatters.XmlFormatter);