From 5b4c8b4e784f363f17fecc2906dc9eff02766c71 Mon Sep 17 00:00:00 2001 From: Elivo Date: Wed, 23 Apr 2025 11:50:36 +0800 Subject: [PATCH] =?UTF-8?q?ApiOptions=EF=BC=8C=E5=A2=9E=E5=8A=A0=20JsonRen?= =?UTF-8?q?derer=EF=BC=8C=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A=E4=B9=89=20J?= =?UTF-8?q?son=20=E6=B8=B2=E6=9F=93=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Apewer/Web/ApiOptions.cs | 6 +++++- Apewer/Web/ApiProcessor.cs | 22 +++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) 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;