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;