OData V4属性路由不使用正确的操作

时间:2018-01-16 09:40:52

标签: odata attributerouting odata-v4

我在OData V4中遇到属性路由问题。我有一个简单的Customers模型类和一个Controller,它有2个Get方法。但是,每当我尝试获取像/Customers(7)这样的特定客户时,它总是使用第二个Get方法来获取所有客户,但从不使用id参数进入方法。我在这里失踪了什么?谢谢!

控制器:

using System.Data;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.OData;
using System.Web.OData.Routing;
using API.Models;

namespace API.Controllers
{
    public class CustomersController : ODataController
    {
        private OContext db = new OContext();

        // GET: Customers(5)
        [HttpGet]
        [ODataRoute("Customers({id:int})")]
        [EnableQuery]
        public SingleResult<Customers> Get([FromODataUri] int id)
        {
            IQueryable<Customers> result = db.Customers.Where(p => p.Id == id).AsQueryable();

            return SingleResult.Create(result);
        }

        // GET: Customers
        [HttpGet]
        [ODataRoute("Customers")]
        [EnableQuery]
        public IQueryable<Customers> Get()
        {
            return db.Customers.AsQueryable();
        }
    }
}

WebApiConfig:

using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using API.Models;
using Microsoft.OData.Edm;

namespace API
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            config.MapHttpAttributeRoutes();
            config.MapODataServiceRoute("odata", null, GetEdmModel());
            config.EnsureInitialized();
        }

        private static IEdmModel GetEdmModel()
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
            builder.Namespace = "API.Controllers";
            builder.ContainerName = "DefaultContainer";
            builder.EntitySet<Customers>("Customers").EntityType.HasKey(c => c.Id);
            builder.EntitySet<Customers_CustomField>    ("Customers_CustomFields");
            var edmModel = builder.GetEdmModel();
            return edmModel;
        }
    }
}

0 个答案:

没有答案