gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:40:34 24 4
gpt4 key购买 nike

我需要在 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);
}
}

WebApiConfig.cs

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;
}

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

最佳答案

动机:如果查询字符串包含单词 prettyprintprettyprint=true 则 pretty-print ,如果不存在则不 pretty-print 查询字符串中的单词 prettyprintprettyprint=false

注意:此过滤器会检查每个请求中的打印是否美观。默认情况下关闭 pretty-print 功能非常重要,仅在需要时才启用。

第 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);
}
}

第 2 步:全局配置此过滤器。

public static void Register(HttpConfiguration config)
{
config.Filters.Add(new PrettyPrintFilterAttribute());
}

关于json - 在 HttpConfiguration 实例中的 ASP.NET Web API 应用程序中处理 json pretty-print 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com