Я создаю образец из двух образцов OData Web API, каждый из которых отлично работает как отдельный проект. Но когда я добавляю второй класс ODataController, тогда сайт больше не работает, жалуясь на шаблоны пути OData, которые работали ранее. Вот более подробная информация:Добавление нового контроллера 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/функция/$ метаданных), я получаю следующее сообщение об ошибке:
System.InvalidOperationExceptionThe path template 'GetSalesTaxRate(state={state})' on the action 'GetSalesTaxRate' in controller 'Products' is not a valid OData path template. Resource not found for the segment 'GetSalesTaxRate'.
Контроллеры отображаются на разные маршруты («функции» и «действия»). Может быть, проблема в том, что каждый маршрут сопоставляется с его собственным EdmModel?
ОБНОВЛЕНИЕ. Я проверил, что могу добавить больше контроллеров, если они относятся к одной и той же модели EDM. Но как только я представляю вторую модель (и ссылаюсь на нее с MapODataServiceRoute), тогда вся услуга ломается. Есть ли способ обхода нескольких моделей?
ОБНОВЛЕНИЕ 2. Если я подклассом DefaultHttpControllerTypeResolver и включаю только один контроллер (любой из них), то также работает отлично. Но я все еще озадачен тем, почему несколько контроллеров, использующих разные модели, терпят неудачу.
Спасибо Congyong, это то, чего мне не хватало! –
Этот ответ спас мою жизнь !!! – Rahul