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

控制台APP调用Post接口时参数值全为0或null问题排查

问题:控制台调用Post接口时参数始终为默认值(0或null)

我在用控制台应用调用Post接口时遇到异常,传递的参数始终是默认值(0或null)。以下是相关代码:

控制台应用代码

using MSE.DTO.DTOs.WorkStation;
using Newtonsoft.Json;
using System.Text;

var random = new Random();

var data = new WorkStationRandomValueDTO
{
    WorkStationId = random.Next(1, 100),
    Temperature = (decimal)Math.Round(random.NextDouble() * 100, 2),
    Pressure = (decimal)Math.Round(random.NextDouble() * 2000, 2),
    Status = random.Next(0, 1) == 1
};
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");

using (var client = new HttpClient())
{
    var response = client.PostAsync("http://localhost:5002/WorkStationRandom/Post", content).Result;
    if (response.IsSuccessStatusCode)
    {
        Console.WriteLine("Data saved successfully!");
    }
    else
    {
        Console.WriteLine("Failed to save data: " + response.StatusCode);
    }
}

Mvc Api控制器代码

using AutoMapper;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using MSE.DataAccess.Context;
using MSE.DTO.DTOs.WorkStation;
using MSE.Entity.Entities.Concrete;
using System.Net;
using System.Text.Json.Serialization;
using System.Web.Http;
using FromBodyAttribute = System.Web.Http.FromBodyAttribute;
using HttpGetAttribute = System.Web.Http.HttpGetAttribute;
using HttpPostAttribute = System.Web.Http.HttpPostAttribute;
using RouteAttribute = System.Web.Http.RouteAttribute;

namespace MSE.Web.Controllers
{
    public class WorkStationRandomController : ApiController
    {
        private readonly ApplicationDbContext _dbContext;
        private readonly IMapper _mapper;
        public WorkStationRandomController(ApplicationDbContext dbContext, IMapper mapper)
        {
            _dbContext = dbContext;
            _mapper = mapper;
        }

        [HttpPost]
        public IHttpActionResult Post(WorkStationRandomValueDTO data)
        {
            if (data != null)
            {
                var workStation = _mapper.Map<WorkStation>(data);
                _dbContext.WorkStations.Add(workStation);
                _dbContext.SaveChanges();

                return Ok();
            }
            else
            {
                return BadRequest("Data cannot be null.");
            }
        }
        [System.Web.Http.HttpGet]
        public string Get()
        {
            return "ok";
        }
    }
}

问题原因及解决办法

  • 核心问题:控制器混用了ASP.NET Web API(System.Web.Http)与ASP.NET Core的特性,且Post方法参数未标记[FromBody],导致框架无法正确解析请求体中的JSON数据。
  • 修正步骤:
    1. 移除System.Web.Http相关引用:ASP.NET Core项目应使用Microsoft.AspNetCore.Mvc下的特性,无需引用旧版Web API的命名空间。
    2. 给Post参数添加[FromBody]:明确指定参数从请求体中解析。
    3. 统一使用ASP.NET Core特性:继承ControllerBase而非旧版ApiController,使用[ApiController]和[Route]规范路由。
    4. 修正控制台请求地址:路由定义为[Route("[controller]")]后,请求地址应改为http://localhost:5002/WorkStationRandom,无需追加/Post。

修正后的控制器代码:

using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using MSE.DataAccess.Context;
using MSE.DTO.DTOs.WorkStation;
using MSE.Entity.Entities.Concrete;

namespace MSE.Web.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WorkStationRandomController : ControllerBase
    {
        private readonly ApplicationDbContext _dbContext;
        private readonly IMapper _mapper;

        public WorkStationRandomController(ApplicationDbContext dbContext, IMapper mapper)
        {
            _dbContext = dbContext;
            _mapper = mapper;
        }

        [HttpPost]
        public IActionResult Post([FromBody] WorkStationRandomValueDTO data)
        {
            if (data != null)
            {
                var workStation = _mapper.Map<WorkStation>(data);
                _dbContext.WorkStations.Add(workStation);
                _dbContext.SaveChanges();

                return Ok();
            }
            else
            {
                return BadRequest("Data cannot be null.");
            }
        }

        [HttpGet]
        public string Get()
        {
            return "ok";
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:25:57