Web Services oData Web服务的HTTP补丁程序增量为空

jtjikinw  于 2022-11-15  发布在  其他
关注(0)|答案(2)|浏览(118)

我首先使用实体框架代码。我的实体和控制器是由Visual Studio生成的,没有修改。
此问题似乎是修补程序请求的DELTA为空。Web服务上的内部错误是Validate()函数引发的“对象引用未设置为对象的示例”。
这是我的Web服务-这是一个PUT服务,它的行为类似于一个补丁。这是为了解决代理框架的一个bug,它似乎不适用于补丁。

// PUT: odata/Device(5)
    public IHttpActionResult Put([FromODataUri] long key, Delta<LineSeg> patch)
    {
        Validate(patch.GetEntity());

        if (!ModelState.IsValid)
        {
            return NotFound();
        }

        LineSeg LineSeg = db.LineSeg.Find(key);
        if (LineSeg == null)
        {
            return NotFound();
        }

        //note - put is acting as a patch due to agentry bug
        patch.Patch(LineSeg);

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!LineSegExists(key))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return Updated(LineSeg);
    }

我的要求是:
标题:

Content-Type: application/atom+xml

正文:

<?xml version="1.0" encoding="utf-8"?>
<entry xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<content type="application/xml">
  <m:properties>
     <d:RESULTS_ID m:type="Edm.Int64">399</d:RESULTS_ID>
  </m:properties>
ffx8fchx

ffx8fchx1#

你错过了[FromBody]

public IHttpActionResult Put([FromODataUri] long key, [FromBody] Delta<LineSeg> patch)
...

是控制器解封对象所必需的

u4vypkhs

u4vypkhs2#

在我的情况下,问题是由Nswag包引起的。我必须完全删除它,问题才得以解决。而且我还必须删除[FromODataUri]和[FromBody]。所以最终结果应该是:

public IHttpActionResult Put(long key, Delta<LineSeg> patch)

还可以查看以下提供的示例:https://github.com/OData/AspNetCoreOData必须升级到odata的最新nuget软件包和其他软件包,才能让示例正常工作。

相关问题