1

我创建了一个如下所示的 EntitySetController:

   public class OrdersController : EntitySetController<Order,Guid>
{
    private readonly PizzaCompanyEntities _context = Factories.DataFactory.GetPizzaContext();

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            _context.Dispose();
        }
        base.Dispose(disposing);
    }

    public override IQueryable<Order> Get()
    {
        return _context.Orders;
    }

    protected override Order GetEntityByKey(Guid key)
    {
        var result = _context.Orders.FirstOrDefault(o => o.Id == key);
        if (result == null)
        {
            throw new HttpResponseException(HttpStatusCode.NotFound);
        }
        return result;
    }
}

在现有的 MVC 4 Web 应用程序中。我配置路由如下:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapODataRoute("PizzaApi", "odata", GetImplicitEdm());
    }

    private static IEdmModel GetImplicitEdm()
    {
        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<Order>("Orders");
        builder.EntitySet<Pizza>("Pizzas");
        builder.EntitySet<Pizzas_To_Orders>("PizzasToOrders");
        builder.EntitySet<Size>("Sizes");
        builder.EntitySet<Status>("Statuses");
        builder.EntitySet<Pizzas_To_Toppings>("PizzasToToppings");

        return builder.GetEdmModel();
    }
}

并执行如下配置:

    public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

但是当我执行我的路由时,http://localhost:29064/odata/Orders我得到一个 404 和一条消息“找不到路径 /odata/Orders 的控制器或没有实现 IController。

我无法弄清楚我缺少什么来注册路由和运行控制器。我从头开始做了一个类似的应用程序,没有遇到这个麻烦。

如何让我的 OData 路由正常工作?

4

0 回答 0