Web Api中的OData路由

Bar*_*rtG 2 .net c# odata asp.net-web-api

我正在尝试OData在Web Api中启用.我创建了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));
     }
Run Code Online (Sandbox Code Playgroud)

_ticketService是一个模拟服务,它使用AsQueryable()方法从TicketModel的静态List返回样本数据.它工作正常.

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

"控制器中操作的路径模板不是有效的OData路径模板".

以前有人有这个问题吗?有任何想法吗?帮助赞赏.

PS.这是我在这里的第一个问题,所以如果遗漏了什么,请告诉我.

Fan*_*ang 5

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

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

  3. FYI

    odata.org

    odata.github.io/WebApi/