【问题标题】:WebAPI OData v3 Composite Key DeleteWebAPI OData v3 复合键删除
【发布时间】:2015-02-09 17:22:12
【问题描述】:

我在使用 OData v3、复合键和删除项目时遇到了一些路由问题。我已经如下设置了我的控制器和实体(在此处存根方法,它们在我的实现中已完成)并且可以对数据运行基本查询(GET 过滤等)

当我使用 DELETE 调用 url http://localhost:62658/OData/ProductStockLimit(StockLimitGroupId=1,ProductRegexMatch=Test) 时,我不断收到 404 并显示消息“未找到与请求 URI 匹配的 HTTP 资源”

我假设路由没有采用这种方法,但我不知道为什么我的所有其他 OData 路由都可以正常使用删除,我能看到的唯一区别是这是一个复合键。

其他人有这个问题吗?

public class ProductStockLimit
{

  [Key, Column(Order = 2)]
  public string ProductRegexMatch { get; set; }

  [Key, ForeignKey("StockLimitGroup"), Column(Order = 1)]
  public int StockLimitGroupId { get; set; }

  public virtual StockLimitGroup StockLimitGroup { get; set; }

  [Column(Order = 3)]
  public double Quantity { get; set; }


}


namespace Website.Areas.OData.Controllers
{
    public class ProductStockLimitController : ODataController
    {
        [EnableQuery(AllowedQueryOptions = AllowedQueryOptions.All)]
        public IQueryable<ProductStockLimit> Get()
        {

        }

        public IHttpActionResult Post(ProductStockLimit item)
        {


        }

        public HttpResponseMessage Delete( [FromODataUri]int StockLimitGroupId,[FromODataUri] string ProductRegexMatch)
        {

        }

    }
}

【问题讨论】:

    标签: c# asp.net asp.net-web-api odata


    【解决方案1】:

    从我看到的情况来看,OData v3 实现似乎没有正确处理复合键。 This link 有一个路由约定类,在应用时可以正确处理它们。

    请注意不要为您的操作方法使用参数名称“key”,因为这会导致它尝试在字典中添加另一个“key”元素,从而导致异常。

    【讨论】:

      猜你喜欢
      • 2015-04-10
      • 2013-03-23
      • 2023-03-04
      • 2015-01-08
      • 2014-07-26
      • 2019-10-13
      • 2016-01-26
      • 2018-06-29
      • 1970-01-01
      相关资源
      最近更新 更多