Мне нужно зарегистрировать веб-службу OData после запуска приложения. В случае динамического конфигурирования EntitySets и т.д.Добавить маршруты OData Web Api * после * Application_Start?
Если я зарегистрировать его в обычном порядке
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
Это работает нормально, но у меня нет всей информации о моем EdmModel при запуске, так что я хочу зарегистрируйте его позже. (Администратором выбора OData модели, например)
Но, если я зарегистрировать его после
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
Это не сработало.
Я попытался использовать решение от How to dynamically add OData Web Api routes *after* Application_Start? , но он также не работал.
Я пытался что-то вроде
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register2);
}
и
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional });
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
config.MapODataServiceRoute(routeName: "ProductsRoute", routePrefix: "odata", model: builder.GetEdmModel());
}
public static void Register2(HttpConfiguration config)
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Order>("Orders");
var route = config.Routes.Where(r => r is System.Web.OData.Routing.ODataRoute).First();
var odataRoute = route as System.Web.OData.Routing.ODataRoute;
config.MapODataServiceRoute(routeName: "OrdersRoute", routePrefix: "odata", model: builder.GetEdmModel(), pathHandler: odataRoute.PathRouteConstraint.PathHandler, routingConventions: odataRoute.PathRouteConstraint.RoutingConventions);
//config.EnsureInitialized(); - commented or not commented same result
}
Вы выяснили, как динамически _remove_ маршрут OData после того, как он был добавлен? –