我正在开发一个使用Entity Framework 5 Code First,WebApi和ASPNET MVC 4的项目。 我有一个像这样的模型
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
}
和这个配置
public class CategoryMap : EntityTypeConfiguration<Categoria>
{
public CategoryMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Properties
this.Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(t => t.Name)
.HasMaxLength(50);
this.Property(t => t.Description)
.HasMaxLength(100);
}
}
现在,在我的webapi控制器中(在POST方法中)我正在尝试验证发送的模型,但由于它是POST(创建)而Id是IDENTITY,因此它将变为null或空,因此模型。有效说它不是有效的。
public HttpResponseMessage Post(Category category)
{
if (ModelState.IsValid)
{
...
return response;
}
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
除了更改列的类型之外是否有任何解决方案,除了不检查模型是否有效之外?
提前致谢!吉列尔莫。
答案 0 :(得分:0)
我没有亲自使用过WebAPI,但在使用WebAPI中的视图模型而不是实际的域对象时遇到了一些问题吗?
创建“CreateCategory”视图模型类并将其绑定到POST动词。此视图模型与您的域类相同,而不是它不会公开ID属性以及您想要的任何其他更改。由于没有可以验证的属性,因此没有什么可以进行验证。
public HttpResponseMessage Post(CreateCategoryViewModel category)
使用Model.IsValid验证视图模型,它通过验证,然后将视图模型映射到实际的模型对象。
应该与绑定视图模型的标准MVC操作非常相似。
希望有所帮助。
答案 1 :(得分:0)
创建一个接口(比如ICategory),它复制Category属性,Name和Description,并让Category类实现该接口。然后修改您的HTTPRespoonseMessge Post方法,取一个ICategory类型的参数。
公共HttpResponseMessage帖子(ICategory类别) { }