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

ASP.NET Core 7.0 Razor Pages如何接收POST请求体?

ASP.NET Core 7.0 Razor Pages 处理非表单POST请求

一、正确的POST请求捕获与请求体获取方式

你创建的Test.cshtml.cs需要按照以下方式编写,才能正确捕获POST请求并读取请求体:

  1. 定义请求模型:先创建对应请求体参数的类(替代Node.js里的req.body):
public class LoginRequest
{
    public string Username { get; set; }
    public string Password { get; set; }
}
  1. 实现OnPost方法:在TestModel中编写public的OnPost方法,通过[FromBody]特性绑定JSON请求体,同时用日志输出参数:
public class TestModel : PageModel
{
    private readonly ILogger<TestModel> _logger;

    public TestModel(ILogger<TestModel> logger)
    {
        _logger = logger;
    }

    public IActionResult OnPost([FromBody] LoginRequest request)
    {
        if (request == null)
        {
            _logger.LogWarning("请求体为空");
            return BadRequest("无效的请求体");
        }

        _logger.LogInformation($"捕获到用户名:{request.Username},密码:{request.Password}");

        // 后续可添加数据库插入逻辑,比如:
        // await _dbContext.UserRecords.AddAsync(new UserRecord { Username = request.Username });
        // await _dbContext.SaveChangesAsync();

        return Ok("请求处理完成");
    }
}

二、Postman请求配置要点

发送请求时必须匹配格式,否则无法触发方法或绑定参数:

  • 请求地址:https://localhost:<你的端口>/test(Razor Pages默认路由对应Pages文件夹下的文件名)
  • 请求方法:POST
  • 请求头:添加Content-Type: application/json
  • 请求体:选择raw -> JSON,输入示例内容:
{
    "username": "test_user",
    "password": "test_pass"
}

三、控制台无输出的排查方案

如果仍看不到日志输出,检查以下几点:

  1. 方法访问权限:确保OnPost是public,私有方法不会被路由系统识别。
  2. 日志级别配置:打开appsettings.json,确认日志级别包含Information:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  }
}
  1. 请求体格式:必须严格符合JSON语法,否则[FromBody]绑定会失败,request会为null。

四、手动读取原始请求体(可选)

如果不想用模型绑定,也可以直接读取原始请求体内容:

public async Task<IActionResult> OnPost()
{
    using var reader = new StreamReader(Request.Body);
    var rawBody = await reader.ReadToEndAsync();
    _logger.LogInformation("原始请求体:{RawBody}", rawBody);

    // 手动反序列化JSON
    var request = System.Text.Json.JsonSerializer.Deserialize<LoginRequest>(rawBody);
    if (request != null)
    {
        _logger.LogInformation("解析后用户名:{Username}", request.Username);
    }

    return Ok();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 02:32:18