c# - 处理 Odata/entityset/key/navigation

标签 c# asp.net asp.net-web-api odata

我们有一个基于 ODataSamples-master odata 示例中的 DynamicEdmModelCreation 项目的项目。

我们已经设置了一个路由约定来处理对这个特定 Controller 的所有请求:

[HttpGet]
[EnableQuery]
public EdmEntityObjectCollection Get()
{
...
}
[EnableQuery]
public IEdmEntityObject Get(string key)
{
...
}

我们举个例子

/odata/Hotels -> 确定!

/odata/Hotels(1) -> 好的!

/odata/Hotels(1)/Room -> 响应:

No routing convention was found to select an action for the OData path with template '~/entityset/key/navigation'.

调试我们看到路由约定很好地处理请求并将其重定向到我们的 Controller ,但没有执行任何方法。路由约定是:

public class MatchRoutingConventionService : IODataRoutingConvention
{
    public string SelectAction(
        ODataPath odataPath,
        HttpControllerContext controllerContext,
        ILookup<string, HttpActionDescriptor> actionMap)
    {
        return null;
    }

    public string SelectController(ODataPath odataPath, HttpRequestMessage request)
    {
        return (odataPath.Segments.FirstOrDefault() is EntitySetPathSegment) ? "HamdleAll" : null;
    }
}

我们认为问题可能出在 WebApi 中选择正确的方法来处理请求,因为我们使用的是通用签名 IEdmEntityObject Get(string key)

最佳答案

在您的 Controller 中,只有两个方法名为 Get()、Get(string key)。结果是:

  1. /odata/Hotels 可以,因为请求可以按照惯例路由到 Get() 方法。

  2. /odata/Hotels(1) 可以,因为请求可以按照约定路由到 Get(string key)

但是,您没有创建其他方法来响应其他请求,例如请求示例:

/odata/Hotels(1)/Room

由于没有响应~/entityset/key/navigation的方法,Web API OData在你的controller中找不到方法,所以抛出上面的错误信息。

我的尝试:

您可以修改它以满足您的要求。希望它能帮助你。

谢谢。

山姆

关于c# - 处理 Odata/entityset/key/navigation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34819648/

相关文章:

c# - 带有 "any cpu"编译选项的 SQLite [未选中 "prefer 32 bit"选项时在 64 位机器上崩溃]

asp.net - httpRuntime targetFramework ="4.5"导致 500 - 内部服务器错误

c# - .Net Web Api 2.2 端点中的依赖注入(inject)不可用

c# - 是否可以使用 powershell 加载多个 .dll?

c# - 当所有内容都设置为四位小数时, Entity Framework 四舍五入

asp.net - asp.NET 中的 TDD 新手,我是否在正确的轨道上编写测试?

visual-studio - `visual studio 2017 添加为链接内容文件 (aspnetcore)

c# - 在 ASP.NET Web API 中处理错误的正确方法

c# - File.GetFiles 或 File.EnumerateFiles 锁定文件?

mysql - 在IIS生产服务器上部署带有MySql db的ASP.NET MVC(生产服务器上没有VS)