2016-04-17 8 views
0

私は自分のRESTful APIサービスを作成しました。私は十分にうまくいきますが、返されるデータはXML形式であり、代わりにJSONに入れたいと思っています。これは一連のデータです。データを取得する方法はどちらかである:C#RESTful APIサービスはXMLを返しますが、作成方法はJSON

public IEnumerable<Photo> GetAllPhotos() 
    { 
     return photos; 

    } 

または

public IHttpActionResult GetPhotoById(int PhotoId) 
    { 

     var photos= Array.FindAll(photos, x => x.PhotoId== PhotoId); 
     if (photos== null) 
     { 
      return NotFound(); 
     } 
     return Ok(photos); 
    } 

しかし、一つの要件は、JSONなどのデータを返すことです。

答えて

0

は当然のことながら、Webブラウザは、彼らが最高の理解して働くことができる形式でデータを受信したいです。一般的には、text/html

フォーマッタのリストからJSONフォーマッタまたはXMLフォーマッタを削除することができます(使用しない場合)。主な理由は次のとおりです。

特定のメディアタイプへのWeb APIの応答を制限します。たとえば、JSONレスポンスのみをサポートし、XMLフォーマッタを削除することができます。

次のコードは、デフォルトのフォーマッタを削除する方法を示しています。 Application_Startメソッド(Global.asaxで定義)から呼び出します。

void ConfigureApi(HttpConfiguration config) 
{ 
    // Remove the JSON formatter 
    config.Formatters.Remove(config.Formatters.JsonFormatter); 

    // or 

    // Remove the XML formatter 
    config.Formatters.Remove(config.Formatters.XmlFormatter); 
} 

正直なところ、あなたが本当にそれを取り除くと、最良の答えはブラウザを使用してAPIをテストすることではありません。どうして?これはブラウザが何を最もうまくやっているのかではないので、APIをかなり簡単にテストできるツールがたくさんあります。そして、彼らはすべて無料です。ブラウザ(プラグインやインスペクタの外)でAPIをテストすることは愚かなゲームなので、それらを使用する必要があります。

ソースhttp://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization

+0

OKです。 (JSON形式のデータを返す)。しかし、私のサービスのメタデータをどのように公開すれば、他のアプリケーションでそのメタデータを発見することができますか? – Ron

+0

最後のコメントは無視してください。私はそれをすべて考え出した。 – Ron

+0

ありがとうございます。それがあなたのために働くならば、答えに印を付けてください。 –

3

ブラウザがヘッダーにtext/xmlを送信し、Web APIがコンテンツネゴシエーションをサポートしているため、この問題が発生しています。

は、XMLフォーマッタを削除し、アプリケーションのスタートアップコードにこれを追加するには:

var configuration = GlobalConfiguration.Configuration; 

configuration.Formatters.Remove(configuration.Formatters.XmlFormatter); 
+0

.NET 4.5.2 GlobalConfigurationを使用するSystem.Web.Httpではありません。ユーザーにXMLやJsonの選択肢を与えたいのですか? – Ron

+1

ユーザーにXMLまたはJSONを選択させる場合は、何もしないでください。 「Accept:application/json」または「Accept:text/xml」というリクエストを送信し、ブラウザを使用してテストリクエストを送信しないでください。 –

関連する問題