小编Dav*_*rds的帖子

如何在*Application_Start之后动态添加OData Web Api路由*?

我有一个应用程序,我需要动态添加OData路由.我可以在Application_Start之后添加常规路由就好了,但是在使用OData路由时遇到了麻烦.

以下是我试图动态添加OData Web Api路由的方法.在我的WebApiConfig中,我添加了一个Products路线:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<Product>("Products");
        config.MapODataServiceRoute(routeName: "ProductsRoute", routePrefix: "odata", model: builder.GetEdmModel());
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的ProductsController中,我在Products GET方法中添加以下调用,当我转到http:/// odata/Products时成功调用它(是的,有点奇怪,但是这是演示在Application_Start之后添加路由的一种方法):

GlobalConfiguration.Configure(WebApiConfig.AddOrderRoute);
Run Code Online (Sandbox Code Playgroud)

WebApiConfig.AddOrderRoute方法被正确调用并执行而没有错误:

public static void AddOrderRoute(HttpConfiguration config)
{
    var builder = new ODataConventionModelBuilder();
    builder.EntitySet<Order>("Orders");
    config.MapODataServiceRoute(routeName: "OrdersRoute", routePrefix: "odata", model: builder.GetEdmModel());
    config.EnsureInitialized();
}
Run Code Online (Sandbox Code Playgroud)

所以你认为我现在正确配置了Orders路线.但是当我转到http:/// odata/Orders时,我收到以下错误:

ExceptionMessage=The object has not yet been initialized. 
Ensure that HttpConfiguration.EnsureInitialized() is called in the 
application's startup code after all other …
Run Code Online (Sandbox Code Playgroud)

routes dynamic odata asp.net-web-api

2
推荐指数
1
解决办法
5624
查看次数

标签 统计

asp.net-web-api ×1

dynamic ×1

odata ×1

routes ×1