Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在HttpConfiguration实例的ASP.NET Web API应用程序中处理json pretty print参数_Json_Asp.net Mvc_Asp.net Web Api_Json.net_Pretty Print - Fatal编程技术网

在HttpConfiguration实例的ASP.NET Web API应用程序中处理json pretty print参数

在HttpConfiguration实例的ASP.NET Web API应用程序中处理json pretty print参数,json,asp.net-mvc,asp.net-web-api,json.net,pretty-print,Json,Asp.net Mvc,Asp.net Web Api,Json.net,Pretty Print,我需要在ASP.NET Web API应用程序中添加并处理可选的“pretty”参数。 当用户发送“pretty=true”时,应用程序响应应该看起来像是带有缩进的可读json。 当用户发送“pretty=false”或根本不发送此参数时,他必须得到响应中没有空格符号的json 以下是我所拥有的: Global.asax.cs public class WebApiApplication : HttpApplication { protected void

我需要在ASP.NET Web API应用程序中添加并处理可选的“pretty”参数。 当用户发送“pretty=true”时,应用程序响应应该看起来像是带有缩进的可读json。 当用户发送“pretty=false”或根本不发送此参数时,他必须得到响应中没有空格符号的json

以下是我所拥有的: Global.asax.cs

public class WebApiApplication
        : HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        }
    }
public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Filters.Add(new ValidateModelAttribute());
            config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Newtonsoft.Json.Formatting.Indented
            };
            config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
...
WebApiConfig.cs

public class WebApiApplication
        : HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        }
    }
public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Filters.Add(new ValidateModelAttribute());
            config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Newtonsoft.Json.Formatting.Indented
            };
            config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter());
...
正如您所理解的,我需要在Register方法中使用如下逻辑:

config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Formatting = Newtonsoft.Json.Formatting.Indented
            };
if(prettyPrint) // must be extracted from request and passed here somehow
{
   config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;
}

如何实施?也许应该以其他方式处理它?

动机:如果查询字符串包含单词
prettyprint
prettyprint=true
,那么如果查询字符串中没有单词
prettyprint
,或者
prettyprint=false
,就不要进行漂亮打印

注意:此筛选器检查每个请求中是否有漂亮的打印。默认情况下关闭“漂亮打印”功能非常重要,仅在请求时启用

步骤1:定义自定义操作筛选器属性,如下所示

public class PrettyPrintFilterAttribute : ActionFilterAttribute
{
    /// <summary>
    /// Constant for the query string key word
    /// </summary>
    const string prettyPrintConstant = "prettyprint";

    /// <summary>
    /// Interceptor that parses the query string and pretty prints 
    /// </summary>
    /// <param name="actionExecutedContext"></param>
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {            
        JsonMediaTypeFormatter jsonFormatter = actionExecutedContext.ActionContext.RequestContext.Configuration.Formatters.JsonFormatter;
        jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.None;

        var queryString = actionExecutedContext.ActionContext.Request.RequestUri.Query;
        if (!String.IsNullOrWhiteSpace(queryString))
        {
            string prettyPrint = HttpUtility.ParseQueryString(queryString.ToLower().Substring(1))[prettyPrintConstant];
            bool canPrettyPrint;
            if ((string.IsNullOrEmpty(prettyPrint) && queryString.ToLower().Contains(prettyPrintConstant)) ||
                Boolean.TryParse(prettyPrint, out canPrettyPrint) && canPrettyPrint)
            {                    
                jsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
            }
        }
        base.OnActionExecuted(actionExecutedContext);
    }
}