8

私はMVC4のWebAPIを増やしていますが、デフォルトのフォーマットについて少し混乱しています。APIデータをJSONにしたい。ただし、XMLで返します。http://www.asp.net/web-api/videos/getting-started/your-first-web-apiのMVC4入門ビデオによると、デフォルトではJSONである必要があります。しかし、新しいWeb Apiプロジェクトを作成してサンプルを実行すると、次のようになります。

<ArrayOfstring><string>value1</string><string>value2</string></ArrayOfstring>

私はこれをJSONで取得しようと輪になって走り回っていますが、これについては多くの誤った情報があるようです。そのような:

  1. コンテンツタイプヘッダーに「application/json」を追加すると、JSONが返されるはずです。これは機能しませんが、使用する正確な名前が見つからないため、ヘッダー変数名が正しくないのではないかと思われます。リクエストヘッダーで「Content-Type」と「contentType」を試しましたが、うまくいきませんでした。その上、ヘッダー情報ではなく、デフォルトでJSONが必要です。
  2. JsonFormatterを作成し、それをApplication_Startに追加すると、うまくいくGlobalConfiguration.Configuration.Formatters.Insert(0, new JsonNetFormatter(serializerSettings));はずです。しかし、どの例も機能していないので、私はこれを減価償却して集めました。

デフォルトでJSON形式でデータを出力するには、どうすればよいですか?

4

6 に答える 6

19

これをGLOBAL.ASAXに追加して、application/jsonの応答を取得します

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

したがって、コンテキストでは次のようになります。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BundleTable.Bundles.RegisterTemplateBundles();
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}

または、XMLをメディアタイプとして保持する必要がある場合は、代わりにApp_Start/WebApiConfig.csを編集できます。

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html") );

これにより、JSONはWebブラウザーのデフォルトの応答になりますが、text/htmlが返されます。

ソース

于 2012-10-15T22:46:03.573 に答える
4

APIデータをJSONにしたい。ただし、XMLで返します

WebAPIにどのようにアクセスしていますか?Chromeを使用してwebapiサービスにアクセスしていますか(ニックがコメントで述べているように)?ChromeはAcceptヘッダーapplication/xmlをリクエストに追加します...

コンテンツタイプヘッダーに「application/json」を追加すると、JSONが返されるはずです

代わりに「Accept」ヘッダーを設定してみてください。

JsonFormatterを作成し、それをApplication_Start GlobalConfiguration.Configuration.Formatters.Insert(0、new JsonNetFormatter(serializerSettings));に追加した場合。それはトリックを行う必要があります。しかし、どの例も機能していないので、私はこれを減価償却して集めました。

リクエストのacceptヘッダーがapplication/xmlの場合でも、コンテンツネゴシエーションはXmlMediaTypeFormatterを選択し、application/xmlを返します。もう1つ、JSONのフォーマッターはJsonMediaTypeFormatterと呼ばれ、すでにFormattersコレクションの位置0にあります。

于 2012-10-15T23:23:07.143 に答える
0

JSONのみが必要な場合は、フォーマッターコレクションのすべてのデフォルトをクリアしてから、JSONだけを追加し直します。

于 2012-10-16T11:28:39.607 に答える
0

JSON応答を取得するためにxmlサポートを削除する必要はありません。GETリクエストの場合は、Content-Typeヘッダーではなく、Accept-headerを設定する必要があります。他のHTTP動詞については、状況によって異なります。ここで完全に説明されています。

http://blogs.msdn.com/b/kiranchalla/archive/2012/02/25/content-negotiation-in-asp-net-mvc4-web-api-beta-part-1.aspx

ボーナス:GoogleChromeのPostmanプラグインを使用してRESTAPIをテストします。強くお勧めします :)

https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm?hl=en

于 2013-01-25T12:00:43.547 に答える
0

以下にGLOBAL.ASAXで書くこともできます

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));

これは私にとってもうまくいきます。

于 2013-11-19T12:09:27.577 に答える
0

Felipe Leusinの引用(Chromeを使用してASP.NET Web APIでXMLではなくJSONを返すようにするにはどうすればよいですか?

MVCWebAPIプロジェクトのApp_Start/WebApiConfig.csクラスに以下を追加するだけです。

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html") );

これにより、ほとんどのクエリでjsonを確実に取得できますが、text/xmlを送信するとxmlを取得できます。

応答Content-Typeをapplication/jsonにする必要がある場合は、以下のToddの回答を確認してください:https ://stackoverflow.com/a/20556625/287145

于 2015-02-17T22:39:23.767 に答える