无法使用[FromODataUri]属性获取键值

时间:2019-08-29 13:46:04

标签: asp.net-core attributes odata

我正在使用ASP.net Core和OData nuget包来学习ODATA v4。尽管GET和POST操作没有问题,但是我不知道如何使用[FromODataUri]属性实现DELETE操作。

我看过多个示例,但始终坚持使用GET Action或不向Url显示对调用其实现的操作的使用权。

odata文档似乎只限于客户端查询,而不是服务器实现。

这是控制器的DELETE Action

        [EnableQuery]
        public async Task<IActionResult> Delete([FromODataUri] int Id)
        {
            var author = await context.Authors.FindAsync(Id);
            context.Authors.Remove(author);
            await context.SaveChangesAsync();
            return StatusCode((int)HttpStatusCode.NoContent);
        }

这是Author类

public class Author
    {
        public Author()
        {
            Books = new Collection<Book>();
        }

        [Key]
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public virtual ICollection<Book> Books { get; set; }
    }

当我调用此网址http://localhost:5000/odata/Author(5)删除Id = 5的作者时,Id变量的值设置为0,我希望是5。

谁能告诉我我做错了什么,并指出正确的方向?

更新

我设法通过将[Key]从int更改为string来使DELETE工作。我想这是一种解决方法,但我真的很想知道如何使用int类型

0 个答案:

没有答案