2014-09-29 2 views
1

Я пытаюсь отправить запрос в API третьей стороны с использованием этого DTO:Где находится маршрут/json/syncreply из ServiceStack?

[Route("log_entries", "GET")] 
public class MyRequest: IReturn<MyResponse> 
{ 
} 

Запрос клиента:

string uri = "https://..../api/v1" 
var jsonClient = new JsonServiceClient(uri); 

// This works 
var response = client.Get<MyResponse>("/log_entries"); 

// Does not work 
var response = client.Send(new MyRequest()); 

Я получаю Not Found ответ в настоящее время. Когда я отправляю http:// с помощью Fiddler, я могу увидеть путь . /json/syncreply добавлен i.e. ../api/v1/json/syncreply> Я ищу, чтобы понять, откуда это взялось, и как обеспечить отправку моего запроса по правильному пути.

Приветствия

ответ

3

/json/syncreply является маршрут, который определен в ServiceStack API, как метод для отправки DTOs без указания конкретного маршрута для данного DTO, другими словами ServiceStack хозяин сделает маршрут на основе имя типа MyRequest, которое может быть разрешено клиентами ServiceStack с использованием метода Send.

третья сторона API не используют Send

Как вы потребляя 3 участника API с помощью ServiceStack.JsonServiceClient и их API не основан ServiceStack, то метод Send не будет работать, потому что их сервер API не имеет соответствующие маршруты.

Метод Send работает только для использования ServiceStack API, поскольку это особенность ServiceStack.

Используйте запрос DTO

Вы должны сделать свой запрос, как это, обратите внимание на Get<T> где T является объектом запроса, MyRequest не MyResponse.

MyResponse response = client.Get<MyRequest>(); 

А также добавить косую черту в передней части вашей декларации маршрута на вашем DTO:

[Route("/log_entries", "GET")] 
public class MyRequest: IReturn<MyResponse> 
{ 
} 

tldr;

Для 3 партии API, который не является ServiceStack Service, вам необходимо использовать соответствующие методы Verb, такие как Get, Post, Put и т.д., поэтому используется маршрут определяется на DTO, не json/syncreply маршрут, поэтому просто избежать метод Send.

+1

Приятное объяснение, спасибо – MikeW

+0

@MikeW Добро пожаловать – Scott

Смежные вопросы