2017-02-10 88 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; 
     } 
    }