我在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)
{
}
}
}
答案 0 :(得分:1)
从我看过的情况来看,OData v3实现似乎没有正确处理复合键。 This link有一个路由约定类,应用时会正确处理它们。
请注意,不要在操作方法中使用参数名称“key”,因为这会导致它尝试在字典中添加另一个“key”元素,从而导致异常。