如何成功向ASP.NET Core控制器发送HTTP请求实现CRUD操作
解决方案
1. 复用现有控制器,调整路由匹配
你完全可以用现有的AandEBacklogController处理移动端请求,不需要新建控制器。当前核心问题是移动端请求路径和控制器动作的路由不匹配:
- 移动端请求的是
/AandEBacklog/MobileResponse(基于BaseAddress) - 现有Post方法仅标记
[HttpPost],对应路径是/AandEBacklog
只需给Post方法添加路由后缀,让它匹配移动端的请求路径:
[HttpPost("MobileResponse")] // 新增路由后缀 public async Task<ActionResult<List<AandEBacklog>>> Addemrgncy(AandEBacklog booking) { context.AandEBacklogs.Add(booking); await context.SaveChangesAsync(); return Ok(await context.AandEBacklogs.ToListAsync()); }
2. 确保模型字段匹配
移动端序列化的是仅含note的匿名对象,服务器接收的是AandEBacklog对象,需要满足两个条件:
AandEBacklog类必须包含note属性- 若移动端只传
note,服务器模型需允许其他属性为null(ASP.NET Core默认会忽略未提供的字段,无需额外配置)
如果AandEBacklog没有note属性,要么修改模型添加该字段,要么让移动端序列化完整的AandEBacklog对象。
3. HttpRequest的使用说明
如果需要直接操作请求内容(比如读取原始JSON、获取请求头),可以在控制器方法里直接通过HttpContext.Request访问,不需要提前声明变量:
[HttpPost("MobileResponse")] public async Task<ActionResult<List<AandEBacklog>>> Addemrgncy(AandEBacklog booking) { // 示例:获取请求头信息 var userAgent = HttpContext.Request.Headers.UserAgent; // 示例:读取原始请求体JSON using var reader = new StreamReader(HttpContext.Request.Body); var rawJson = await reader.ReadToEndAsync(); context.AandEBacklogs.Add(booking); await context.SaveChangesAsync(); return Ok(await context.AandEBacklogs.ToListAsync()); }
不过常规CRUD场景下,直接用模型绑定(像你现在的AandEBacklog booking参数)更简洁,没必要直接操作HttpRequest。
4. 额外配置建议
- 你的Program.cs路由配置没问题,
app.MapControllers()已经正确映射控制器路由 - 为避免大小写敏感导致的字段匹配问题,可在Program.cs添加全局JSON序列化配置:
builder.Services.AddControllers() .AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNameCaseInsensitive = true; });
- 测试阶段可以用Postman先调用
http://10.188.144.18:5240/AandEBacklog/MobileResponse,发送JSON{"note":"测试内容"},验证服务器是否正常接收并写入数据库
内容的提问来源于stack exchange,提问作者Luke.Aunger
相关产品推荐
相关产品推荐

