2015-05-08 7 views
1

В настоящее время я отправляю строку json в API для получения объекта, содержащего различные значения.PostAsJsonAsync return null

Это строка JSON я отправляю:

{"SomeProperty":1,"DimensionOne":4,"DimensionTwo":6,"IdNumber":0} 

Теперь у меня нет проблем с самой строкой Json, потому что я проверил эту строку в Скрипач собирается АНИ, и он отлично работает отлично, возвращая все значения, которые мне нужны.

Единственная разница между тем, что я делаю и что делает Fiddler, это то, что я перехожу от сценария к WebService, который отправляется в API.

Вот код, я использую для WebService:

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
[ScriptService] 
public class WebService1 : System.Web.Services.WebService 
{ 
    [WebMethod] 
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public ObjectType Relay(string json) 
    { 
     const string url = "https://api.com"; 
     var client = new HttpClient {BaseAddress = new Uri(url)}; 

     client.DefaultRequestHeaders.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     var response = client.PostAsJsonAsync("api/v1/GetObject", json).Result; 

     if (response.IsSuccessStatusCode) 
     { 
      var objectRequest = Task.FromResult(response.Content.ReadAsStringAsync()); 
      return JsonConvert.DeserializeObject<ObjectType>(objectRequest.Result.Result); 
     } 

     return null; 
    } 
} 

До сих пор он только вернулся нуль (очевидно потому, что response.IsSuccessStatusCode не TRUE)

Но когда я закомментировать, если скобки и удалить возвращаемый null, он дает мне пустой объект, когда я должен получать данные. Все входы правильные.

Мне интересно, должен ли я использовать метод, отличный от PostAsJsonAsync, или если есть что-то еще, что я должен делать с json-строкой или json-заголовком.

Опять же, строка json находится в правильном формате, так как она работала с Fiddler и ранее работала при переходе непосредственно с веб-сайта на API (без WebService).

Буду признателен за любые предложения. Заранее спасибо.

+1

Вы посылаете запрос по протоколу HTTPS, вам нужен сертификат для HttpClient: HTTP: // stackoverflow.com/questions/22251689/make-https-call-using-httpclient –

+0

глядя на это @KhanhTO спасибо за быстрый ответ – terbubbs

+0

@KhanhTO, я бы предложил опубликовать, что в качестве ответа b/c это вполне может быть решением , я хотел бы также дать вам преимущество. – terbubbs

ответ

1

Вы отправляете запрос https. Хотя сертификат клиента не является обязательным в протоколе, но вам нужен сертификат для вашего HttpClient в случае, если сервер требует его: Make Https call using HttpClient