Позвольте мне предварить это, сказав, что я новичок в OData и не могу найти никого, кто делает то, что я собираюсь объяснить.Нам нужно портировать приложение с уровня 2 на 3, а другие наши устаревшие приложения используют для этой цели .NET Remoting ... (что в конечном итоге также потребует этого обновления.) Что ж, мы собирались использовать WCF, но Microsoft, похоже,упала поддержка OData там ... так что мы здесь.OData V4 с Web Api 2.2.Короче говоря, у меня возникают проблемы при формировании правильного маршрута на стороне клиента.
В Fiddler я могу получить доступ к службе OData с помощью Uri:
http://localhost:port/odata/Templates?templateName='MyTemplate'&$expand=Items
И это действительно возвращает мой выбранный объект шаблона так, как я ожидаю.
Используя клиент, сгенерированный кодом, который Microsoft создала для этой версии службы OData, я не могу заставитьпрокси сервис для генерации вышеуказанного Uri.Отладка, я нахожу лучшее, что я могу сформировать в своем Uri:
http://localhost:port/odata/Templates('MyTemplate')?$expand=Items
, но это возвращается как 404, не найденное, если вы выполняете запрос таким способом.
Мой код C # для создания вышеуказанного искаженного маршрута выглядит следующим образом:
string serviceUri = "http://localhost:port/odata/";
var container = new Default.Container( new Uri( serviceUri ) );
var dictLookup = new Dictionary<string, object>() {{"TemplateName", "MyTemplate"}};
var result = container.Templates.ByKey( dictLookup ).Expand("Items");
Я нашел и попытался использовать метод .AppendRequestUri ("templateName = 'MyTemplate') из DataServiceContext (container,), но это не влияет на RequestUri службы, независимо от того, что я помещаю в ее параметр.
Вопрос в том, как получить контейнер, сгенерированный кодом, в клиентском приложении (DataServiceContext), чтобы сформировать Uri следующим образом:
http://localhost:port/odata/Templates?templateName='MyTemplate'&$expand=Items
Любой ответ на это будет принята с благодарностью.
Кент