我有一个WebApi 2控制器。我想在其中一个控制器上使用OData补丁。这是我到目前为止所做的。OData补丁没有更新数据库
我在控制器中添加了以下行WebApiConfig
config.MapODataServiceRoute("odata", "odata", GenerateEdmModle());
private static Microsoft.OData.Edm.IEdmModel GenerateEdmModle()
{
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Auth>("Auths");
return builder.GetEdmModel();
}
然后,这是我想要使用补丁方法
[HttpPatch]
public async Task<IHttpActionResult> PatchAuth(int id, Delta<Auth> value)
{
var auth = await db.Auth.FindAsync(id);
if (auth == null) return NotFound();
System.Diagnostics.Debug.WriteLine(auth.direction, auth.id);
System.Diagnostics.Debug.WriteLine("Patching");
try
{
value.Patch(auth);
await db.SaveChangesAsync();
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine(e.Message);
return InternalServerError(e);
}
return Ok(value);
}
这里就是我如何从它发送角服务
// patch auth
service.patchAuth = function (authId, auth) {
var request = $http({
method: 'PATCH',
url: baseUrl + 'api/Auths',
data: JSON.stringify(auth),
params: { id: authId },
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});
return (request.then(handleSuccess, handleError));
}
这是我在小提琴手 看
我看到控制器找到了Patch Method,看起来好像在试图更新,但是这个值永远不会被更新。
我还在value.Patch(auth)
上添加了一个断点并检查了changedProperties
,但没有任何内容。我一直在试图找出造成这种情况的原因,但没有得到任何线索。
我面临着同样的问题,但只能用整数类型的值。字符串和布尔值正在更新,但不是整数。任何想法为什么?我已经尝试了邮递员的一切。它浪费了我的3天 –