You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core REST API返回Null时报错:Value cannot be null. (Parameter 'text')

问题原因分析

当服务层返回null时,ASP.NET Core的端点处理逻辑会直接调用HttpResponseWritingExtensions.WriteAsync方法,将返回值作为纯文本写入响应。但该方法不允许传入null作为text参数,因此触发ArgumentNullException,导致500错误。

解决方案

方法1:显式返回JSON格式的null(推荐)

修改端点的返回逻辑,通过Results类明确控制响应内容,确保null被序列化为合法JSON返回:

group.MapGet("/{code}/description", async (
    [AsParameters] ArticlesGetDescriptionRequest request, IValidator<ArticlesGetDescriptionRequest> validator
    , IArticlesServices service, CancellationToken cancellationToken)
    => {
        var description = await service.GetDescriptionAsync(request, validator, cancellationToken);
        return description == null ? Results.Json(null) : Results.Ok(description);
    })
.WithName(groupName, nameof(IArticlesServices.GetDescriptionAsync))
.WithDescription(@"Return article description");

也可以用更简洁的switch语法:

group.MapGet("/{code}/description", async (
    [AsParameters] ArticlesGetDescriptionRequest request, IValidator<ArticlesGetDescriptionRequest> validator
    , IArticlesServices service, CancellationToken cancellationToken)
    => await service.GetDescriptionAsync(request, validator, cancellationToken) switch
    {
        null => Results.Json(null),
        var desc => Results.Ok(desc)
    })
.WithName(groupName, nameof(IArticlesServices.GetDescriptionAsync))
.WithDescription(@"Return article description");

方法2:全局配置JSON序列化(所有端点生效)

如果希望所有接口都支持返回顶层null值,可以通过配置JSON序列化规则实现:

  1. 先修改端点返回类型为Task<IActionResult>:
group.MapGet("/{code}/description", async Task<IActionResult> (
    [AsParameters] ArticlesGetDescriptionRequest request, IValidator<ArticlesGetDescriptionRequest> validator
    , IArticlesServices service, CancellationToken cancellationToken)
    => {
        var description = await service.GetDescriptionAsync(request, validator, cancellationToken);
        return Ok(description);
    })
.WithName(groupName, nameof(IArticlesServices.GetDescriptionAsync))
.WithDescription(@"Return article description");
  1. 在Program.cs中添加JSON序列化配置:
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 允许序列化顶层null值
        options.JsonSerializerOptions.DefaultIgnoreCondition = JsonIgnoreCondition.Never;
    });
关键说明

直接返回string?类型的null时,ASP.NET Core会将其视为纯文本响应而非JSON。只有通过Results.Json或IActionResult的方式返回,框架才会将null序列化为合法的JSON响应(null),避免触发参数为空的异常。

内容的提问来源于stack exchange,提问作者user21355808

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 10:30:34