Клиент Odata v4 отправляет запрос в не ожидаемом формате
Привет друзья,
Борется с OData V4 при вызове функции.
Мой клиент отправляет в службу:
http://wrk2198:80/services/ProjectUsedModels(modelNumber='10000')
Служба webapi ожидает, что:
http://wrk2198:80/services/ProjectUsedModels?modelNumber='10000'
Я перепробовал так много вещей, но не могу понять, как это работает.
Как мне заставить клиента и сервис работать вместе
Сервис есть asp.net веб-api
Клиент есть
"ProviderId": "Microsoft.Службы OData.ConnectedService",
"Версия": "0.4.0",
Что я уже пробовал:
В webapiconfig я добавил маршрут
config.Routes.MapHttpRoute( name: "ActionAPI", routeTemplate: "api/{controller}/{action}/{id})", defaults: new { id = RouteParameter.Optional } );
Сущность определяется в конфигурации следующим образом
modelBuilder.EntitySet<ProjectUsedModels_Result>("ProjectUsedModels");
Контроллер содержит:
[EnableQuery] public IEnumerable<ProjectUsedModels_Result> Get(string modelNumber = "") { try { var result = db.ProjectUsedModels(modelNumber); return result; } catch (Exception err) { Logging.Log.Instance.AddException(err); return new List<ProjectUsedModels_Result>(); } }
Вызов Клиентского Кода:
public IEnumerable<ProjectUsedModels_Result> SearchProjectsThatUsedModel(string modelNumber) { var modelnumberParameter = new UriEntityOperationParameter("modelNumber", modelNumber); var uri = new Uri("ProjectUsedModels", UriKind.Relative); return Service.Execute<ProjectUsedModels_Result>(uri, "GET", false, modelnumberParameter); }
ZurdoDev
Я в замешательстве. Это звучит так, как будто вы говорите, что ваш код не создает url-адрес должным образом. Если да, то исправьте это. Я не совсем понимаю, в чем проблема.
Herman<T>.Instance
Как же так?
OData V3 dis это правильно, и V4 имеет новые способы маршрутизации. Я не могу этого понять.
ZurdoDev
Ты звонишь в Службу спасения? Или ваш код - это сервис?
Herman<T>.Instance
код вызывает
ZurdoDev
Итак, где же находится фактический код, который вызывает службу?
Herman<T>.Instance
Добавлено!
ZurdoDev
Я все еще в замешательстве, извини. Маршрут, который у вас есть, предназначен для вашего сайта, не так ли? Таким образом, это не имеет ничего общего с вызовом стороннего api.
Где-то в вашем коде должно быть что-то вроде
var uri = новый Uri($"http://someapi.com/Modles(modelNumber='{modelNumber}')");
Может быть, я просто не могу понять, как ты это делаешь.
Herman<T>.Instance
нет uri должен быть:
var uri = новый Uri($"http://someapi.com/Models-что?modelNumber='{modelNumber}'");
ZurdoDev
Именно так. Так что сделай это, хорошо?
Herman<T>.Instance
Дело в том, что клиент создает URI для меня.
Для V3 это было сделано правильно, для V4 серверам нужны некоторые настройки маршрутизации. Это то, что я ищу.
ZurdoDev
Что такое клиент?
И если клиент создает url-адрес, то измените его, не так ли?
Я чувствую, что упускаю что-то очевидное.
Herman<T>.Instance
Вам не хватает настройки маршрутизации в WebApI
ZurdoDev
Да, но мы уже обсудили это. Клиент не настраивает маршрутизацию. Это делает сервер. Итак, как я уже спрашивал, Вы клиент или сервер?