Servicestack Gateway.Send не работает с POST - PullRequest
1 голос
/ 02 марта 2020

У меня есть этот метод обслуживания

  public async Task Post(DeviceEndpointInsertTemp request)
        {
            //Some AYNC Code
         }

Я называю это так

          var model = new DeviceEndpointInsertTemp() {DeviceNumber = deviceID, IOEndpointList = list, EventGridPostDateTime = postTime};
                var task = Gateway.SendAsync(model);
                await task; //wait for response

Я получаю эту ошибку

{"Could not find method named Put(DeviceEndpointInsertTemp) or Any(DeviceEndpointInsertTemp) on Service IntegrationService"}

ДО того, как я изменю POST на ЛЮБОЙ

public async Task ANY(DeviceEndpointInsertTemp request)
    {
        //Some AYNC Code
     }

Знаете почему?

1 Ответ

1 голос
/ 02 марта 2020

Это объясняется в Документах Service Gateway :

Голые запросы DTO без аннотаций отправляются в виде POST , но альтернативные глаголы также поддерживаются аннотациями запроса DTO. с маркерами интерфейса HTTP Verb , где запрашиваются DTO, содержащие IGet, IPut, et c. отправляются с использованием введенного API Verb, например:

[Route("/customers/{Id}")]
public class GetCustomer : IGet, IReturn<Customer>
{
    public int Id { get; set ;}
}

Поэтому, если вы хотите отправить свой Service Gateway для отправки PUT Запрос вашего запроса DTO должен реализовать соответствующий Маркер интерфейса HTTP Verb , например:

public class DeviceEndpointInsertTemp : IPut, IReturn<TheResponse>
{
  //...
}
...