Rest 带开关语句的WepApi 2 Odata控制器Post/Put关系SIPS/Link/Refs
在WebApi 2+控制器和处理关系中使用OData V3(#ref)或V4(#links): 开关语句是唯一的方法吗? 这两个资源似乎表明每个导航属性都需要一个切换案例Rest 带开关语句的WepApi 2 Odata控制器Post/Put关系SIPS/Link/Refs,rest,asp.net-web-api2,odata,navigation-properties,Rest,Asp.net Web Api2,Odata,Navigation Properties,在WebApi 2+控制器和处理关系中使用OData V3(#ref)或V4(#links): 开关语句是唯一的方法吗? 这两个资源似乎表明每个导航属性都需要一个切换案例 开关(navigationProperty) { 案例“供应商”: //注意:GetKeyFromUri的代码将在本主题后面部分显示。 var relatedKey=Helpers.GetKeyFromUri(请求,链接); var supplier=await db.Suppliers.SingleOrDefaultA
-
开关(navigationProperty) { 案例“供应商”: //注意:GetKeyFromUri的代码将在本主题后面部分显示。 var relatedKey=Helpers.GetKeyFromUri(请求,链接); var supplier=await db.Suppliers.SingleOrDefaultAsync(f=>f.Id==relatedKey); 如果(供应商==null) { 返回NotFound(); } 产品。供应商=供应商; 打破 违约: 返回状态码(HttpStatusCode.NotImplemented); }
问题:我应该为每个导航属性硬编码一个switch语句吗?如果是的话,有没有办法让这个自动神奇地搭建起来?我遇到了这样的问题(v4),我使用基本控制器解决了这个问题。有两个基本控制器:用于导航(您的案例)和CRUD操作-第三个是使用示例。代码不是很干净(我一直试图删除不必要的细节),但我认为这个想法非常清楚。我不认为这是解决这个问题的最佳方法,但我还没有找到任何更简单的方法来按字符串添加和删除属性。我想知道更优雅的答案。对不起,我的英语不好。请添加示例代码和/或包含示例场景。请从链接添加示例代码示例。感谢您花时间回答此问题并创建GitHubGist。我喜欢你的解决方案。而且,你正在用外语回答一个问题。没什么好道歉的。
switch (navigationProperty)
{
case "Supplier":
// Note: The code for GetKeyFromUri is shown later in this topic.
var relatedKey = Helpers.GetKeyFromUri<int>(Request, link);
var supplier = await db.Suppliers.SingleOrDefaultAsync(f => f.Id == relatedKey);
if (supplier == null)
{
return NotFound();
}
product.Supplier = supplier;
break;
default:
return StatusCode(HttpStatusCode.NotImplemented);
}