При добавлении нового контроллера OData происходит сбой существующего контроллера
Я строю пример из двух примеров OData Web API, каждый из которых отлично работает как отдельный проект. Но когда я добавляю второй класс ODataController, сайт больше не работает, жалуясь на шаблоны путей OData, которые работали ранее. Вот больше деталей:
Следующее действие работает нормально, пока его контроллер (ProductsController) является единственным контроллером:
[HttpGet]
[ODataRoute("GetSalesTaxRate(state={state})")]
public IHttpActionResult GetSalesTaxRate([FromODataUri] string state)
{
return Ok(GetRate(state));
}
Теперь я добавляю новый контроллер (MoviesController) с несколькими действиями.
Я расширяю класс запуска Owin, чтобы он выглядел так:
public void Configuration(IAppBuilder builder)
{
var config = new HttpConfiguration();
config.MapODataServiceRoute(routeName: "functions route", routePrefix: "functions", model: FunctionStartup.GetEdmModel());
config.MapODataServiceRoute(routeName: "actions route", routePrefix: "actions", model: ActionStartup.GetEdmModel());
builder.UseWebApi(config);
}
Однако когда я пытаюсь выполнить веб-запрос (URLBASE / functions / $ metadata), я получаю следующую ошибку:
System.InvalidOperationException. Шаблон пути «GetSalesTaxRate (state = {state})» в действии «GetSalesTaxRate» в контроллере «Products» не является допустимым шаблоном пути OData. Ресурс не найден для сегмента GetSalesTaxRate.
Контроллеры отображаются на разные маршруты («функции» и «действия»). Может быть, проблема в том, что каждый маршрут связан с его собственной EdmModel?
ОБНОВИТЬ. Я проверил, что могу добавить больше контроллеров, если они ссылаются на одну и ту же модель EDM. Но как только я ввожу вторую модель (и ссылаюсь на нее из MapODataServiceRoute), весь сервис ломается. Есть ли обходной путь для поддержки нескольких моделей?
ОБНОВЛЕНИЕ 2. Если я создаю подкласс DefaultHttpControllerTypeResolver и включаю только один контроллер (любой из них), то он также работает нормально. Но я все еще озадачен, почему несколько контроллеров, использующих разные модели, перестают работать.