微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对API的PUT请求将值设置为NULL

如何解决对API的PUT请求将值设置为NULL

我下面有一个.Net Core API控制器,它可以执行PUT请求。

sql Server中受影响的表如下:

carID  (varchar(15),NULL)
optionID (varchar(15),NOT NULL)
optionDescription (varchar(255),NULL)
optionType (varchar(50),NULL)
factoryID (varchar(15),NULL)

在测试中,我正在通过PUT API调用发送要更改的属性

{
    " optionID": "633fr","optionDescription": "Full Tech Package A"
}

它确实更新了数据库中的条目,但是还将所有未在PUT调用中发送的值都设置为NULL。因此,尽管它确实更新了optionDescription,但它将除optionID之外的所有其他值都设置为NULL。

如何阻止它设置其他值?

谢谢!

这是控制器:

    // PUT: api/CarOptions/5
    [HttpPut("{id}")]
    public async Task<IActionResult> PutCarOptions(Guid id,CarOptions carOptions)
    {
        if (id != carOptions.OptionId)
        {
            return BadRequest();
        }

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

        try
        {
            await _context.SaveChangesAsync();
        }
        catch (dbupdateConcurrencyException)
        {
            if (!CarOptionsExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return NoContent();
    }

解决方法

根据您的描述,建议您先尝试附加模型,然后将特定属性IsModified设置为true。

这只会更新特定字段,而不更新整个模型。

更多详细信息,您可以参考以下示例:

    // PUT: api/CarOptions/5
    [HttpPut("{id}")]
    public async Task<IActionResult> PutCarOptions(Guid id,CarOptions carOptions)
    {
        _context.Documents.Attach(carOptions);
        _context.Entry(carOptions).Property(x => x.optionDescription).IsModified = true;
        _context.SaveChanges();


        return NoContent();
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。