Asp.net web api 配置Sencha';s Rest代理不发送模型';他在一个柱子上的身份证
我有一个简单的Sencha Touch 2.1模型类:Asp.net web api 配置Sencha';s Rest代理不发送模型';他在一个柱子上的身份证,asp.net-web-api,sencha-touch-2,Asp.net Web Api,Sencha Touch 2,我有一个简单的Sencha Touch 2.1模型类: Ext.define('App.model.User', { extend: 'Ext.data.Model', config: { fields: [ { name: 'id', type: 'number', defaultValue: 0 }, { name: 'first', type: 'string' }, { name: '
Ext.define('App.model.User', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'id', type: 'number', defaultValue: 0 },
{ name: 'first', type: 'string' },
{ name: 'last', type: 'string' },
{ name: 'email', type: 'string' },
{ name: 'lastUpdated', type: 'auto' }
]
},
fullName: function () {
var d = this.data,
names = [d.first, d.last];
return names.join(" ");
}
});
这些模型的集合在我配置为使用sencha的Rest代理的存储中。当我向应用商店添加新模型并调用应用商店上的Sync方法时,新模型将发布到ASP.NET WebAPIUsers控制器,并点击以下操作:
// POST api/Default1
public HttpResponseMessage PostUser(User user)
{
// this is a new user -- get rid of the ID
user.Id = 0;
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.Id }));
return response;
}
else
{
return Request.CreateResponse(HttpStatusCode.BadRequest);
}
}
问题是a字符串作为模型的ID发送,因此它没有通过控制器上的ModelState.IsValid检查。这就是实际发送的内容:
{"id":"ext-record-5","first":"c","last":"d","email":"e","lastUpdated":null}
知道为什么id字段被设置为字符串吗?另外,我知道如何告诉用户控制器中的post操作不验证id字段(因为它应该处理创建新项目的操作,所以服务器为新项目而不是客户端创建id是有意义的)。您需要在模型上设置idProperty。id字段也应设置为自动类型。请参阅文档这帮助我找到了答案。更新后的模型应为:
Ext.define('App.model.User', {
extend: 'Ext.data.Model',
config: {
fields: [
{ name: 'id', type: 'auto', persist: false },
{ name: 'first', type: 'string' },
{ name: 'last', type: 'string' },
{ name: 'email', type: 'string' },
{ name: 'lastUpdated', type: 'auto' }
],
},
fullName: function () {
var d = this.data,
names = [d.first, d.last];
return names.join(" ");
}
});
谢谢你的建议。有两件事:我看到idProperty默认为id,这是我在模型中拥有的字段之一。因此,我认为不需要添加idProperty配置选项。我确实将类型更改为auto,但是id属性仍然被发送到服务器,并且模型验证失败。如果我遗漏了一些东西,请您发布您建议如何修改模型?您是否尝试过将idProperty设置为id,即使您不必这样做?我发现在过去这可以解决我的问题。现在我坚持使用idProperty字段,这些字段没有名称“id”,以避免任何混淆。是的,我有。看起来我仍然不需要保留ID,因为MVC WebAPI在json对象到达控制器之前就尝试将其转换为类型化对象。因此,我只使用模型放置的位置(用于更新),例如user/1,在通过验证后在控制器中设置用户的id。