我首先使用实体框架代码。我的实体和控制器是由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>
2条答案
按热度按时间ffx8fchx1#
你错过了
[FromBody]
是控制器解封对象所必需的
u4vypkhs2#
在我的情况下,问题是由Nswag包引起的。我必须完全删除它,问题才得以解决。而且我还必须删除[FromODataUri]和[FromBody]。所以最终结果应该是:
还可以查看以下提供的示例:https://github.com/OData/AspNetCoreOData必须升级到odata的最新nuget软件包和其他软件包,才能让示例正常工作。