diff --git a/Apewer/Web/ApiOptions.cs b/Apewer/Web/ApiOptions.cs index 1ff8d97..58f00fd 100644 --- a/Apewer/Web/ApiOptions.cs +++ b/Apewer/Web/ApiOptions.cs @@ -42,10 +42,14 @@ namespace Apewer.Web /// 默认值:NULL public Action DefaultRenderer { get; set; } - /// 允许输出的 Json 对象缩进。 + /// 对输出的 Json 对象缩进。 /// 默认值:不缩进。 public bool JsonIndent { get; set; } = false; + /// 默认的结果渲染器。 + /// 默认值:NULL + public Action JsonRenderer { get; set; } + /// 限制最大请求的字节数。 /// 默认值:-1,不使用 ApiOptions 限制。 public long MaxRequestBody { get; set; } = -1; diff --git a/Apewer/Web/ApiProcessor.cs b/Apewer/Web/ApiProcessor.cs index d0b0651..309cfc6 100644 --- a/Apewer/Web/ApiProcessor.cs +++ b/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;