2017-04-26 37 views
0

我是新來的C#HttpClient類,我希望你們& gals可以幫我解決我的問題。嘗試調用PostAsync方法時,我得到StatusCode 401。這裏是我的代碼StatusCode 401原因未經授權調用PostAsync WebRequest

public WebClient(HttpClient httpClient) 
    { 
     string webHost = ConfigurationManager.AppSettings["webHost"]; 
     string webApiKey = ConfigurationManager.AppSettings["webApikey"]; 

     _httpClient = httpClient; 
     _httpClient.BaseAddress = new Uri(webHost); 
     _httpClient.DefaultRequestHeaders.Accept.Clear(); 
     _httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); 

     _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("x-coupa-api-key", "=" + ConfigurationManager.AppSettings["coupaApikey"]); 
     System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12; 
    } 

public Tuple<bool, Task<HttpResponseMessage>> Comment(comment comment) 
    { 
     try 
     { 
      string commentUrl = string.Format("{0}api/comments/", _webHost); 
      var responseMessage = _httpClient.PostAsync(commentUrl, CreateHttpContent(comment)); 
      Log.Error("Response message: " + responseMessage.Result); 
      return new Tuple<bool, Task<HttpResponseMessage>>(responseMessage.Result.IsSuccessStatusCode, responseMessage); 

     } 
     catch (Exception ex) 
     { 
      Log.Error("Call to Web failed.", ex); 
      throw; 
     } 

    } 

private static HttpContent CreateHttpContent(comment data) 
    { 
     var format = "application/xml"; 

     return new StringContent(Common.SerializeUtf8(data), Encoding.UTF8, format); 
    } 

所以我發送XML與後到的虛擬主機提供商 - 我從PostAsync得到以下結果:

響應消息:

StatusCode: 401, ReasonPhrase: 'Unauthorized', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: 
{ 
    Transfer-Encoding: chunked 
    Status: 401 Unauthorized 
    X-Frame-Options: SAMEORIGIN 
    X-XSS-Protection: 1; mode=block 
    X-Content-Type-Options: nosniff 
    X-Request-Id: 53e17930-f9fe-4ec4-ae5b-b772ce5f308e 
    X-Runtime: 0.025822 
    Cache-Control: no-cache 
    Date: Wed, 26 Apr 2017 06:07:39 GMT 
    Content-Type: text/html 
} 

回答

1

找到了解決辦法。不應該使用授權,只是「添加標題」:

_httpClient.DefaultRequestHeaders.Add("x-coupa-api-key", ConfigurationManager.AppSettings["webApikey"]); 
相關問題