繁体   English   中英

Web Api中的OData路由

[英]OData routing in Web Api

我正在尝试在Web Api中启用OData 我创建了OData路由,并创建了一个从ODataController继承的控制器,我想从我的应用程序中获取一些示例数据。 这是我的代码:

public class TicketController : BaseWebApiController //inherits from ODataController
{
     [EnableQuery]
     public IQueryable<TicketModel> Get()
     {
         return (_ticketService.GetAll());
     }

     [EnableQuery]
     public SingleResult<TicketModel> Get([FromODataUri] int id) 
     {
         return (_ticketService.Get(id));
     }

_ticketService是一个模拟服务,它使用AsQueryable()方法从静态的TicketModel列表返回示例数据。 工作正常。

public static class ODataConfig
{
    public static void EnableOData(HttpConfiguration config)
    {
        config.MapODataServiceRoute("odata", "api", GetEdmModel(), new DefaultODataBatchHandler(GlobalConfiguration.DefaultServer));
        config.EnsureInitialized();
    }

    private static IEdmModel GetEdmModel()
    {
        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<TicketModel>("Ticket");
        var edmModel = builder.GetEdmModel();
        return edmModel;
    }
}

然后在App_Start/WebApiConfig.cs注册方法中调用ODataConfig.EnableOData(config)

问题是,虽然url http://localhost:52074/api/Ticket正确调用Get()方法,但http://localhost:52074/api/Ticket(1)的url请求也调用Get()而不是Get(1) 我试图附加ODataRouting("({id})")属性,但是它所做的只是抛出异常消息

“控制器中操作上的路径模板不是有效的OData路径模板”。

有人遇到过这个问题吗? 有任何想法吗? 帮助表示赞赏。

PS。 这是我的第一个问题,所以如果有什么遗漏,请告诉我。

  1. 您应该将id重命名为key ,然后http://localhost:52074/api/Ticket(1)将路由到Get(1)

  2. 如果要使用ODataRoute,则属性应类似于: [ODataRoute("Customers({id})")]

  3. FYI

    OData网站

    OData文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM