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