RealPath:
WebPath:
2016/11/08 17:47 (JST) 更新
REST API >>

APIの出力形式 (XML, JSON)

Contents

WebApiConfig が以下のようになっている場合(デフォルト)、ApiController の出力内容は、通常のブラウザアクセスでは XML、AJAX アクセスでは JSON、という形式になります(実際にはこれはリクエスト時の Accept ヘッダに依存する)

App_Start/WebApiConfig.cs

public static class WebApiConfig
{
	public static void Register(HttpConfiguration config)
	{
		config.MapHttpAttributeRoutes();

		config.Routes.MapHttpRoute(
			name: "DefaultApi",
			routeTemplate: "api/{controller}/{id}",
			defaults: new { id = RouteParameter.Optional }
		);
	}
}

デフォルト挙動を確認してみる

Postman で確認してみます。

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 の場合(普通のブラウザアクセスを想定)
img--400--size

Accept: */* の場合(普通に AJAX アクセスした場合)
img--400--size

リクエスト時の Accept ヘッダにより応答形式が変わっていることが確認できます。

デフォルトで JSON のみ出力するようにする

いまどき XML もあまり使われなくなっている(気がする)ので、とりあえず応答形式を一律 JSON にしてみます。

App_Start/WebApiConfig.cs

....
using System.Net.Http.Formatting; // ★ここを追加
....

public static class WebApiConfig
{
	public static void Register(HttpConfiguration config)
	{
		config.Formatters.Clear(); // ★ここを追加
		config.Formatters.Add(new JsonMediaTypeFormatter()); // ★ここを追加

		config.MapHttpAttributeRoutes();

		config.Routes.MapHttpRoute(
			name: "DefaultApi",
			routeTemplate: "api/{controller}/{id}",
			defaults: new { id = RouteParameter.Optional }
		);
	}
}

これで API は常に JSON 形式の応答を返すようになります。

img--350--size