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

ASP.NET POST API接收.NET MAUI JSON并转换为数据模型的问题

问题解决步骤

1. 修复ASP.NET API接收逻辑

你的API当前直接把单个参数暴露在Post方法签名里,但ASP.NET无法自动从JSON请求体中解析分散的参数,需要用模型类统一接收,同时用[FromBody]标记告诉框架从请求体读取数据。另外,async void会导致异步操作无法正确追踪,要改成async Task。

修改后的API代码:

[Route("api/[controller]")]
[ApiController]
public class ViewController : ControllerBase
{
    // 定义接收请求的DTO类(可与View实体类一致,也可单独定义)
    public class ViewRequest
    {
        public DateOnly Date { get; set; }
        public TimeOnly Time { get; set; }
        public int ProductId { get; set; }
    }

    // POST api/<ViewController>
    [HttpPost]
    public async Task<IActionResult> Post([FromBody] ViewRequest request)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        using (VapeshopContext db = new VapeshopContext())
        {
            View view = new View
            {
                Date = request.Date,
                Time = request.Time,
                ProductId = request.ProductId
            };
            db.Views.Add(view);
            await db.SaveChangesAsync();
        }

        return Ok();
    }    
}

2. 修复.NET MAUI请求代码

你当前错误地同时使用了PostAsJsonAsync和StringContent——PostAsJsonAsync会自动把对象序列化为JSON并设置正确的Content-Type,不需要手动创建StringContent,这会导致请求格式错误,服务器无法解析。

修改后的请求代码:

private async void toInfoPage(object obj)
{
    if (obj != null)
    {         
        var p = obj as Product;
        // 直接传递匿名对象给PostAsJsonAsync,框架会自动处理序列化
        var requestData = new
        {
            Date = DateOnly.FromDateTime(DateTime.Now),
            Time = TimeOnly.FromDateTime(DateTime.Now),
            ProductId = p.Id
        };
        await httpClient.PostAsJsonAsync("http://10.0.2.2:5125/api/View", requestData);

        var newPage = new ProductInfo(obj as Product);
        await Navigation.PushAsync(newPage);
    }
}

核心问题说明

  • 服务器端必须通过**模型类+[FromBody]**接收JSON请求体,不能直接在方法签名里写分散参数,除非参数是URL查询字符串或路由参数。
  • PostAsJsonAsync和StringContent不要混用,前者已经封装了序列化和请求头设置,手动传StringContent会导致双重序列化,服务器无法解析正确数据,这就是你参数全为零值的直接原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:03:36