2016-11-30 8 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

それは受け入れます:アプリケーション/ xmlの – Jonas

+0

ない正確に、' Accept'ヘッダは、サーバが要求されたMIMEタイプと応答を返すことを意味し、コンテンツネゴシエーションのためでありますそれが利用可能である場合に限り、それ以外の場合はデフォルトを返します。 –

答えて

1

XMLシリアライザのWeb APIで例外が発生した場合、api 2は自動的にJSONシリアライザに戻ります。 XMLシリアライザにシリアライズ例外を強制する必要のあるヒントについては、AarónBCに感謝します。

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