ASP.NET Core 7.0 Razor Pages如何接收POST请求体?
ASP.NET Core 7.0 Razor Pages 处理非表单POST请求
一、正确的POST请求捕获与请求体获取方式
你创建的Test.cshtml.cs需要按照以下方式编写,才能正确捕获POST请求并读取请求体:
- 定义请求模型:先创建对应请求体参数的类(替代Node.js里的
req.body):
public class LoginRequest { public string Username { get; set; } public string Password { get; set; } }
- 实现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" }
三、控制台无输出的排查方案
如果仍看不到日志输出,检查以下几点:
- 方法访问权限:确保
OnPost是public,私有方法不会被路由系统识别。 - 日志级别配置:打开
appsettings.json,确认日志级别包含Information:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } } }
- 请求体格式:必须严格符合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
相关产品推荐
相关产品推荐

