【问题标题】:asp core web api http post is nullasp core web api http post为空
【发布时间】:2021-05-24 07:35:51
【问题描述】:

我通过查看 ms 基本文档创建了一个 webapi。

ms Doc

这是工作 todoitems

除了待办事项我 因为我想用头像图的形式 插入模型头像,创建头像上下文,将控制器做成脚手架。

solution view

但是,当我尝试以帖子的形式接收数据时,数据始终为空。 error

null

这是代码

[Route("api/AvatarCharts")]
    [ApiController]
    public class AvatarChartsController : ControllerBase
    {
        private readonly AvatarChartContext _context;

        public AvatarChartsController(AvatarChartContext context)
        {
            _context = context;
        }

        // GET: api/AvatarCharts
        [HttpGet]
        public async Task<ActionResult<IEnumerable<AvatarChart>>> GetAvatarCharts()
        {
            return await _context.AvatarCharts.ToListAsync();
        }

        // GET: api/AvatarCharts/5
        [HttpGet("{modelId}")]
        public async Task<ActionResult<AvatarChart>> GetAvatarChart(long modelId)
        {
            var avatarChart = await _context.AvatarCharts.FindAsync(modelId);

            if (avatarChart == null)
            {
                return NotFound();
            }

            return avatarChart;
        }

        // PUT: api/AvatarCharts/5
        // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
        [HttpPut("{modelId}")]
        public async Task<IActionResult> PutAvatarChart(long modelId, AvatarChart avatarChart)
        {
            if (modelId != avatarChart.modelId)
            {
                return BadRequest();
            }

            _context.Entry(avatarChart).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!AvatarChartExists(modelId))
                {
                    return NotFound();
                }
                else
                {
                    throw;
                }
            }

            return NoContent();
        }

        // POST: api/AvatarCharts
        // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754
        [HttpPost]
        public async Task<ActionResult<AvatarChart>> PostAvatarChart( AvatarChart avatarChart)
        {
            _context.AvatarCharts.Add(avatarChart);
            await _context.SaveChangesAsync();

            return CreatedAtAction("GetAvatarChart", new { modelId = avatarChart.modelId }, avatarChart);
        }

        // DELETE: api/AvatarCharts/5
        [HttpDelete("{modelId}")]
        public async Task<IActionResult> DeleteAvatarChart(long modelId)
        {
            var avatarChart = await _context.AvatarCharts.FindAsync(modelId);
            if (avatarChart == null)
            {
                return NotFound();
            }

            _context.AvatarCharts.Remove(avatarChart);
            await _context.SaveChangesAsync();

            return NoContent();
        }

        private bool AvatarChartExists(long modelId)
        {
            return _context.AvatarCharts.Any(e => e.modelId == modelId);
        }
    }
 public class AvatarChartContext :DbContext
    {
        public AvatarChartContext(DbContextOptions<AvatarChartContext> options) : base(options)
        {

        }
        public DbSet<AvatarChart> AvatarCharts { get; set; }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<AvatarChart>().HasKey(c => c.modelId);

            
        }
    }
public class AvatarChart
    {
        [Key]
        public long modelId;
        public string colorCode;
        public long dateTime;        //ex 20210101130000
        public string name;
        public string diagnose;

    }

swagger

添加 postgressql dbenter image description here

【问题讨论】:

标签: asp.net asp.net-core webapi


【解决方案1】:

更新:

你错过了 {get;设置;}。

public class AvatarChart
{
    [Key]
    public long modelId {get; set;}
    public string colorCode {get; set;}
    public long dateTime {get; set;}        //ex 20210101130000
    public string name {get; set;}
    public string diagnose {get; set;}

}

【讨论】:

  • 感谢您回答我没有工作错误是一样的,为什么 todoitems 帖子有效?
  • @MasterJung,你应该添加 {get;设置;} 到您的财产。
【解决方案2】:

您能否进行这些更改并告诉我变量结果返回了什么值。另外,你能先验证你的 ModelState 吗? [HttpPost] 公共异步任务 PostAvatarChart(AvatarChart avatarChart) {

        await _context.AvatarCharts.AddAsync(avatarChart);
        var result = await _context.SaveChangesAsync() > 0;

        return CreatedAtAction("GetAvatarChart", new { modelId = avatarChart.modelId }, avatarChart);
    }

【讨论】:

  • result is false public async Task> PostAvatarChart([FromBody] AvatarChart avatarChart) avatarChart 值为 null
  • 由于他使用的是Controller之上的ApiController属性,我认为[FromBody]应该已经自动处理了。我没有明确写 [FromBody]。
  • @MasterJung 是啊,突然发现是个api项目,不需要[FromBody]。
  • JSON 应该也可以正常工作,我不知道为什么没有发送表单的数据。
  • @mj1313 您能否从一开始就调试您的代码或将您的项目发布到一些公开的仓库上?一定有一些遗漏。
猜你喜欢
  • 1970-01-01
  • 2017-03-29
  • 2018-01-24
  • 2019-05-20
  • 2017-08-28
  • 1970-01-01
  • 2019-07-01
  • 2017-12-10
  • 1970-01-01
相关资源
最近更新 更多