gpt4 book ai didi

c# - Web Api 中的 OData 路由

转载 作者:行者123 更新时间:2023-12-03 19:38:19 28 4
gpt4 key购买 nike

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

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 Register 方法中调用

ODataConfig.EnableOData(config)

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

"The path template on the action in controller is not a valid OData path template".

以前有人遇到过这个问题吗?有任何想法吗?感谢帮助。

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

最佳答案

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

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

  3. 仅供引用

    OData website

    OData Documentation

关于c# - Web Api 中的 OData 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31985730/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com