如何配置NewtonsoftJson在序列化失败时终止请求并返回错误?
解决ASP.NET Core中Newtonsoft.Json序列化失败时参数为null的问题
要实现序列化失败时直接返回错误、不执行Action方法,只需修改Newtonsoft.Json的配置,让序列化错误触发异常,由ASP.NET Core框架自动处理并返回错误响应。
具体配置步骤
在.NET 6+的Program.cs(或旧版本的Startup.cs)中,配置AddNewtonsoftJson时,为SerializerSettings.Error事件添加处理逻辑,直接抛出序列化错误:
// .NET 6+ Program.cs示例 var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.Error = (sender, errorArgs) => { // 抛出序列化过程中发生的异常,终止后续动作执行 throw errorArgs.ErrorContext.Error; }; }); var app = builder.Build(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
效果说明
- 当客户端传入的JSON无法正常序列化为
MyComplexObject时,Error事件会触发并抛出异常,ASP.NET Core的模型绑定流程会立即终止,不会执行MyAction方法。 - 框架会自动返回
400 Bad Request响应;若控制器标记了[ApiController]特性,默认会返回标准化的模型验证错误响应。 - 若
MyAction的myObj参数为null,则可以确定是客户端主动传入了null,而非序列化错误导致。
额外说明
如果需要自定义错误响应格式,可以结合ProblemDetails或自定义异常过滤器,捕获序列化异常并返回自定义结构的错误信息,但上述基础配置已经能满足核心需求:区分客户端传入的null和序列化错误,且序列化错误时不执行Action。
内容的提问来源于stack exchange,提问作者cooper_milton
相关产品推荐
相关产品推荐

