2017-02-10 92 views
0

以下是API調用我讓使用郵遞員,買到票早在響應主體(截圖)與API/V1/AUTH method = post的內容服務器獲取OTCSticket:如何使用C#

enter image description here

我無法在C#中的HttpWebRequest響應中獲取票證。請看下面的小樣本代碼:

C#代碼

HttpWebRequest Request = WebRequest.Create(strUrl) as HttpWebRequest; 
Request.Method = "POST"; 
Request.Headers.Add("Authorization", "Basic <>"); 
//Request.ContentType = "application/form-data"; 

Request.KeepAlive = true; 

string data = string.Format("username=" + UserName + "&password=" + Password); 
byte[] dataStream = Encoding.UTF8.GetBytes(data); 
Request.ContentLength = dataStream.Length; 

using (Stream newStream = Request.GetRequestStream()) 
{ 
    // Send the data. 
    newStream.Write(dataStream, 0, dataStream.Length); 
    newStream.Close(); 
} 

var Response = (HttpWebResponse)Request.GetResponse(); 
using (var stream = Response.GetResponseStream()) 
using (var reader = new StreamReader(stream)) 
{ 
    if (Response.StatusCode != HttpStatusCode.OK) 
     throw new Exception("The request did not complete successfully and returned status code " + Response.StatusCode); 

    ResponseTicket strTicket= JsonConvert.DeserializeObject<ResponseTicket>(reader.ToString()); 
    JsonConvert.DeserializeObject(Response.GetResponseStream().ToString()); 
    MessageBox.Show(strTicket.Ticket); 
} 

凡爲statuscode=200。但內容長度爲0. 在CS10.5 API上找到任何意義的幫助都很困難。我在那裏查了AppWorks平臺但徒勞無功。如果有人能夠在代碼中發現問題,我將不勝感激,這顯然我看不到。

回答

0

我不知道這是否仍然是您的問題。對我來說也是這樣,但是明白了:

  public string LoginAsAdminAndRetrieveTicket(string userName, string passWord, string domain, string url) 
    { 
     var uri = $"http://{url}/otcs/llisapi.dll/api/v1/auth"; 

     var request = new HttpRequestMessage(); 
     request.Headers.Add("Connection", new[] { "Keep-Alive" }); 
     request.Headers.Add("Cache-Control", "no-cache, no-store, must-revalidate"); 
     request.Headers.Add("Pragma", "no-cache"); 
     request.RequestUri = new Uri(uri); 
     request.Method = HttpMethod.Post; 
     request.Content = new StringContent($"username={userName};password={passWord}", Encoding.UTF8, "application/x-www-form-urlencoded"); 

     var httpClientHandler = new HttpClientHandler 
     { 
      Proxy = WebRequest.GetSystemWebProxy(), 
      UseProxy = true, 
      AllowAutoRedirect = true 
     }; 

     using (var client = new HttpClient(httpClientHandler)) 
     { 
      var response = client.SendAsync(request).Result; 
      string ticket; 
      var vals = response.Headers.TryGetValues("OTCSTicket", out IEnumerable<string> temp) ? temp : new List<string>(); 
      if (vals.Any()) 
      { 
       ticket = vals.First(); 
      } 

      return response.Content.ReadAsStringAsync().Result; 
     } 
    }