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

22
Apewer/Web/ApiProcessor.cs

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

Loading…
Cancel
Save