LoginSignup
3
5

More than 5 years have passed since last update.

ASP.NET Web APIのJSONをprrety printする

Last updated at Posted at 2016-06-09

モチベーション

翻訳: WebAPI 設計のベストプラクティス - Qiita

JSON はデフォルトで整形しよう
圧縮された状態の JSON をブラウザ上で見るのは、決して気持ちの良いものではありません

はい。整形されたJSONを返したいです。

手段

Web API Poster - ASP.netによると、アクション(Controllerのメソッド)の返した結果を変更するには、ActionFilterを追加します。
事後処理はOnActionExecutedメソッドに定義します。

PrettyPrintFilterAttribute.cs
using System.Net.Http.Formatting;
using System.Web.Http.Filters;

namespace WebApplication1
{
    public class PrettyPrintFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            JsonMediaTypeFormatter jsonFormatter = actionExecutedContext.ActionContext.RequestContext.Configuration.Formatters.JsonFormatter;
            jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
            base.OnActionExecuted(actionExecutedContext);
        }
    }
}

AcitionFilterをHttpConfigurationに登録すると、すべてのアクションに適用できます。

WebApiConfig.cs
using System.Web.Http;

namespace WebApplication1
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API の設定およびサービス
            config.Filters.Add(new PrettyPrintFilterAttribute());

            // Web API ルート
            config.MapHttpAttributeRoutes();

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

WebApiConfig.RegisterGlobal.asax.csで呼び出されている前提です。

Global.asax.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Routing;

namespace WebApplication1
{
    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }
    }
}

参考

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5