Ono*_*dai 3 c# asp.net-core asp.net-core-3.1
我有一个自定义过滤器属性,改编自当前为 .NET Core 2.2 实现的这个答案,我想适应 3.1。它引用了 Newtonsoft.JSON,出于兼容性原因,我更愿意保持这种方式。
代码如下:
public class AllPropertiesAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext ctx)
{
if (!(ctx.Result is ObjectResult objectResult)) return;
var serializer = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Include };
serializer.Converters.Add(new StringEnumConverter());
var formatter = new JsonOutputFormatter(serializer,
ctx.HttpContext.RequestServices.GetRequiredService<ArrayPool<char>>());
objectResult.Formatters.Add(formatter);
}
}
Run Code Online (Sandbox Code Playgroud)
JsonOutputFormatter根据官方文档,仅支持 .net core 2.2 ;我应该如何继续在 3.1 下保持相同的行为?
Mik*_*ray 11
Microsoft.AspNetCore.Mvc.NewtonsoftJson 包中的 NewtonsoftJsonOutputFormatter 相当于旧的 JsonOutputFormatter。它有一个小的变化,它也将在构造函数中接受一个 MvcOptions:
public NewtonsoftJsonOutputFormatter(
JsonSerializerSettings serializerSettings,
ArrayPool<char> charPool,
MvcOptions mvcOptions)
Run Code Online (Sandbox Code Playgroud)
这仅通过SuppressOutputFormatterBuffering选项真正影响行为。您也许可以从 RequestServices 解决它,或者您可以即时创建一个新的。
| 归档时间: |
|
| 查看次数: |
3744 次 |
| 最近记录: |