C# 批处理请求实体始终为空

C# 批处理请求实体始终为空,c#,asp.net-web-api,odata,breeze,C#,Asp.net Web Api,Odata,Breeze,我试图使用breeze将新添加的实体作为批处理请求发布到我的ODataV3WebAPI,但是应该传递给我的ODataPost方法的实体总是空的 我的批处理路由配置: 接收带有空实体的调用的My controller post方法: public IHttpActionResult Post([FromBody]ApiUserEntity ApiUserEntity) { if(apiUserEntity==null) 返回请求(ModelState); } 实体: 公共类基本实体 { 公共i

我试图使用breeze将新添加的实体作为批处理请求发布到我的ODataV3WebAPI,但是应该传递给我的ODataPost方法的实体总是空的

我的批处理路由配置:

接收带有空实体的调用的My controller post方法:

public IHttpActionResult Post([FromBody]ApiUserEntity ApiUserEntity)
{
if(apiUserEntity==null)
返回请求(ModelState);
}
实体:

公共类基本实体
{
公共int Id{get;set;}
public DateTime CreatedAt{get;set;}
}
公共类ApiUserEntity:BaseEntity
{
公共字符串用户名{get;set;}
公共字符串密码{get;set;}
公共字符串电子邮件{get;set;}
公共字符串Salt{get;set;}
公共ApiUserRole角色{get;set;}
公共API权限{get;set;}
}
枚举ApiUserRole{
管理
工作人员
使用者
}
枚举权限{
阅读
写
读写
}
使用breeze调用savechanges的简化代码

manager.createEntity('ApiUserEntity',
{ 
Id:1,
用户名:“用户”,
密码:“密码”,
电子邮件:“电子邮件”,
盐:“盐”,
角色:“1”,
许可:“1”
});
saveChanges();
当我用fiddler检查请求时,我看到它正在发送我用breezejs添加的正确数据:

POSThttp://localhost:22594/odata/$batch HTTP/1.1
主机:本地主机:22594
连接:保持活力
内容长度:640
Pragma:没有缓存
缓存控制:没有缓存
MaxDataServiceVersion:3.0
来源:http://localhost:51406
用户代理:Mozilla/5.0(Windows NT 6.3;WOW64)AppleWebKit/537.36(KHTML,如Gecko)Chrome/39.0.2171.71 Safari/537.36
内容类型:多部分/混合;边界=批次fffa-6088-92e7
接受:多部分/混合
数据服务版本:2.0
推荐人:http://localhost:51406/
接受编码:gzip,deflate
接受语言:en-US,en;q=0.8,nl;q=0.6,nb;q=0.4,es;q=0.2
--批次号fffa-6088-92e7
内容类型:多部分/混合;边界=变更集_d571-5fc6-6f89
--变更集_d571-5fc6-6f89
内容类型:应用程序/http
内容传输编码:二进制
POST-ApiUsers HTTP/1.1
内容ID:1
数据服务版本:2.0
接受:application/atomsvc+xml;q=0.8,应用程序/json;odata=完整元数据;q=0.7,应用程序/json;q=0.5,*/*;q=0.1
内容类型:application/json
MaxDataServiceVersion:3.0
{“用户名”:“名称”,“密码”:“密码”,“电子邮件”:“电子邮件”,“Salt”:“DASDASD”,“角色”:“1”,“权限”:“1”,“Id”:1,“创建数据”:“1899-12-31T23:00:00”}
--变更集_d571-5fc6-6f89--
--批次号:fffa-6088-92e7--

调试时,会命中控制器上的post方法,但实体始终为空。我使用的是实体框架,并使用conventionmodelbuilder在webapi上生成了元数据

我找到了一个解决办法。我的控制器是从Odata控制器派生的。一旦我把它改成Apicontroller,我的批处理请求就成功了!不知道为什么。也可能会失去odata控制器提供的许多功能。因此,我们需要进行更多的调试以找到实际原因。

向我们展示breezejs代码和您的实体?使用我的实体和breeze代码更新了问题,谢谢。什么是ApiUserRole和ApiPermission?它们看起来像类,但您将它们用作整数值。这些是枚举,我也将它们添加到了问题中。您可以在不指定这两个枚举的值的情况下尝试您的请求吗?
config.Routes.MapODataServiceRoute(
    routeName: "odata",
    routePrefix: "odata",
    model: builder.GetEdmModel(),
    batchHandler: new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer)
 );