Rest 带开关语句的WepApi 2 Odata控制器Post/Put关系SIPS/Link/Refs

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

在WebApi 2+控制器和处理关系中使用OData V3(#ref)或V4(#links):

开关语句是唯一的方法吗?

这两个资源似乎表明每个导航属性都需要一个切换案例

  • 开关(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);
}