2015-02-09 65 views
0

我有OData v3,复合键和删除项目的一些路由问题。我已经建立了我的控制器和实体(如下所示),并且可以对数据运行基本查询(对GET进行过滤等)WebAPI OData v3复合键删除

当我呼叫url http://localhost:62658/OData/ProductStockLimit(StockLimitGroupId=1,ProductRegexMatch=Test)与DELETE,但我不断收到404消息“没有HTTP资源被发现匹配的请求的URI”

我假设路由没有采用这种方法,但我不知道为什么我的所有其他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) 
     { 

     } 

    } 
} 

回答

1

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

请注意,快速警告请勿将参数名称“key”用于您的操作方法,因为这会导致它尝试在字典中添加另一个“key”元素以引发异常。