Browse Source

ApiOptions,增加 JsonRenderer,支持自定义 Json 渲染。

master
王厅 1 month ago
parent
commit
5b4c8b4e78
  1. 6
      Apewer/Web/ApiOptions.cs
  2. 22
      Apewer/Web/ApiProcessor.cs

6
Apewer/Web/ApiOptions.cs

@ -42,10 +42,14 @@ namespace Apewer.Web
/// <remarks>默认值:NULL</remarks>
public Action<ApiContext, object> DefaultRenderer { get; set; }
/// <summary>允许输出的 Json 对象缩进。</summary>
/// <summary>输出的 Json 对象缩进。</summary>
/// <remarks>默认值:不缩进。</remarks>
public bool JsonIndent { get; set; } = false;
/// <summary>默认的结果渲染器。</summary>
/// <remarks>默认值:NULL</remarks>
public Action<ApiContext, Json> JsonRenderer { get; set; }
/// <summary>限制最大请求的字节数。</summary>
/// <remarks>默认值:-1,不使用 ApiOptions 限制。</remarks>
public long MaxRequestBody { get; set; } = -1;

22
Apewer/Web/ApiProcessor.cs

@ -212,6 +212,14 @@ namespace Apewer.Web
// 已明确 Json 类型。
if (returnValue is Json json)
{
var renderer = context.Options.JsonRenderer;
if (renderer != null)
{
renderer.Invoke(context, json);
return;
}
// 默认设置到 data 属性。
response.Data = json;
return;
}
@ -233,7 +241,15 @@ namespace Apewer.Web
// 类型未知,尝试 ToJson 方法。
if (returnValue is IToJson toJson)
{
response.Data = toJson.ToJson();
var tojson = toJson.ToJson();
var renderer = context.Options.JsonRenderer;
if (renderer != null)
{
renderer.Invoke(context, tojson);
return;
}
response.Data = tojson;
return;
}
@ -690,7 +706,7 @@ namespace Apewer.Web
}
catch (Exception ex)
{
Logger.Internals.Exception(model, ex);
Logger.Internals.Exception(ex, model);
}
RuntimeUtility.Dispose(model);
return;
@ -703,7 +719,7 @@ namespace Apewer.Web
}
catch (Exception ex)
{
Logger.Internals.Exception(result, ex);
Logger.Internals.Exception(ex, result);
}
RuntimeUtility.Dispose(result);
return;

Loading…
Cancel
Save