Herman<T>.Instance Ответов: 0

Клиент 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&lt;T&gt;.Instance

Как же так?

OData V3 dis это правильно, и V4 имеет новые способы маршрутизации. Я не могу этого понять.

ZurdoDev

Ты звонишь в Службу спасения? Или ваш код - это сервис?

Herman&lt;T&gt;.Instance

код вызывает

ZurdoDev

Итак, где же находится фактический код, который вызывает службу?

Herman&lt;T&gt;.Instance

Добавлено!

ZurdoDev

Я все еще в замешательстве, извини. Маршрут, который у вас есть, предназначен для вашего сайта, не так ли? Таким образом, это не имеет ничего общего с вызовом стороннего api.

Где-то в вашем коде должно быть что-то вроде
var uri = новый Uri($"http://someapi.com/Modles(modelNumber='{modelNumber}')");

Может быть, я просто не могу понять, как ты это делаешь.

Herman&lt;T&gt;.Instance

нет uri должен быть:
var uri = новый Uri($"http://someapi.com/Models-что?modelNumber='{modelNumber}'");

ZurdoDev

Именно так. Так что сделай это, хорошо?

Herman&lt;T&gt;.Instance

Дело в том, что клиент создает URI для меня.

Для V3 это было сделано правильно, для V4 серверам нужны некоторые настройки маршрутизации. Это то, что я ищу.

ZurdoDev

Что такое клиент?
И если клиент создает url-адрес, то измените его, не так ли?

Я чувствую, что упускаю что-то очевидное.

Herman&lt;T&gt;.Instance

Вам не хватает настройки маршрутизации в WebApI

ZurdoDev

Да, но мы уже обсудили это. Клиент не настраивает маршрутизацию. Это делает сервер. Итак, как я уже спрашивал, Вы клиент или сервер?

0 Ответов