Webapi Ode to the Tsomposi Kay 删除
WebAPI OData v3 Composite Key Delete
我在 OData v3、复合键和删除项方面遇到了一些路由问题。我已经按如下方式设置了我的控制器和实体(在此处添加了方法,它们在我的实现中已完成)并且可以 运行 对数据进行基本查询(过滤等 GET)
当我用 DELETE 调用 url http://localhost:62658/OData/ProductStockLimit(StockLimitGroupId=1,ProductRegexMatch=Test) 时,我不断收到 404 消息 "No HTTP resource was found that matches the request 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)
{
}
}
}
根据我的观察,OData v3 实现似乎无法正确处理复合键。 This link 有一个路由约定 class,应用后可以正确处理它们。
请注意不要在您的操作方法中使用参数名称 "key",因为这会导致它尝试在字典中添加另一个 "key" 元素,从而导致异常。
我在 OData v3、复合键和删除项方面遇到了一些路由问题。我已经按如下方式设置了我的控制器和实体(在此处添加了方法,它们在我的实现中已完成)并且可以 运行 对数据进行基本查询(过滤等 GET)
当我用 DELETE 调用 url http://localhost:62658/OData/ProductStockLimit(StockLimitGroupId=1,ProductRegexMatch=Test) 时,我不断收到 404 消息 "No HTTP resource was found that matches the request 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)
{
}
}
}
根据我的观察,OData v3 实现似乎无法正确处理复合键。 This link 有一个路由约定 class,应用后可以正确处理它们。
请注意不要在您的操作方法中使用参数名称 "key",因为这会导致它尝试在字典中添加另一个 "key" 元素,从而导致异常。