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

ASP.NET Core最小Web API如何读取请求体JSON传SQL Server存储过程

ASP.NET Core 最小Web API 实现方案

核心逻辑是跳过框架默认的强类型模型绑定流程,直接读取请求体原始流拿到完整JSON字符串,再通过ADO.NET作为参数传入SQL Server存储过程,全程不需要额外定义请求DTO类,是最简实现路径。


具体实现步骤

  • 前置依赖确认
    不需要引入第三方序列化、ORM相关包,仅需确保项目引用了Microsoft.Data.SqlClient用于SQL Server连接,.NET 6+版本的最小API项目默认已包含基础请求处理能力。
  • 接口核心代码
    直接在Program.cs中编写接口映射逻辑,不需要额外分层:
var builder = WebApplication.CreateBuilder(args);
// 从配置文件读取数据库连接字符串,避免硬编码
var dbConnStr = builder.Configuration.GetConnectionString("SqlServerConnection");

// 可选:如果要传输超过30MB的大JSON,配置Kestrel请求体大小上限
builder.WebHost.ConfigureKestrel(opt =>
{
    opt.Limits.MaxRequestBodySize = 100 * 1024 * 1024; // 示例设置为100MB,按需调整
});

var app = builder.Build();

// 映射POST接口
app.MapPost("/api/save-json-data", async (HttpRequest request) =>
{
    // 重置请求体流位置,避免框架前置处理导致流读取为空
    request.EnableBuffering();
    request.Body.Position = 0;
    // 直接读取请求体原始JSON字符串,不做反序列化转换
    string rawJsonContent = await new StreamReader(request.Body).ReadToEndAsync();

    // ADO.NET调用存储过程
    using var conn = new SqlConnection(dbConnStr);
    using var cmd = new SqlCommand("你的存储过程名", conn)
    {
        CommandType = System.Data.CommandType.StoredProcedure
    };
    // 传入JSON字符串参数,对应存储过程参数建议定义为NVARCHAR(MAX)避免截断
    cmd.Parameters.AddWithValue("@RawJson", rawJsonContent);

    await conn.OpenAsync();
    // 执行存储过程,根据实际返回需求选择ExecuteScalarAsync/ExecuteReaderAsync
    var execResult = await cmd.ExecuteNonQueryAsync();

    return Results.Ok(new { IsSuccess = true, RowsAffected = execResult });
})
.DisableAntiforgery(); // 非表单场景关闭防伪令牌校验,避免不必要的拦截

app.Run();

关键注意事项

  • 存储过程接收JSON的参数务必设置为NVARCHAR(MAX)类型,不要用定长NVARCHAR,否则长JSON会被截断。
  • 不要给接口参数加[FromBody]特性绑定自定义类,否则框架会自动执行JSON反序列化,既拿不到原始字符串,也会增加额外性能损耗。
  • 调用接口时确保请求头Content-Type设置为application/json,不要用表单格式提交。
  • 如果需要做权限、异常处理,直接在MapPost后加对应中间件/过滤器即可,不影响核心逻辑。

内容的提问来源于stack exchange,提问作者W. Nema

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:27:21