curl命令到C#代码

curl命令到C#代码

问题描述:

我有以下的curl命令curl命令到C#代码

curl.exe -k "relevance=value" --user admin:pass https://10.221.22.13:34323/api/query 

与此对应,我写了下面的C#代码

private async void RunClient(string _address, string username, string password) 
    { 

     HttpClient client = new HttpClient(); 

     string authString = username + ":" + password; 

     try 
     { 

      var byteArray = Encoding.ASCII.GetBytes(authString); 
      client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 

      string valueString = "value"; 

      client.DefaultRequestHeaders.Add("relevance", valueString); 

      // Send a request asynchronously and continue when complete 
      HttpResponseMessage response = await client.GetAsync(_address); 

      // Check that response was successful or throw exception 
      response.EnsureSuccessStatusCode(); 


      var content = await response.Content.ReadAsStringAsync(); 
     } 
     catch(Exception ex) 
     { 

     } 
    } 

curl命令工作正常,在cmd中,但C#代码抛出错误的请求(400)错误。

我在哪里错了?

Thnx提前。

+0

什么是你的服务器说它异常收到 – BugFinder

+0

,它显示错误的请求 – Skye

+0

否 - 我问你的网络服务器收到了什么 - 不是你看到的错误是 – BugFinder

原来这是一个POST请求和“关联=价值”应该在内容主体,而不是标头中传递,这里是修改后的代码:

private async void RunClient(string _address, string username, string password) 
    { 
     // Create an HttpClient instance 
     HttpClient client = new HttpClient(); 

     string authString = username + ":" + password; 

     try 
     { 
      //add authentication to header 
      var byteArray = Encoding.ASCII.GetBytes(authString); 
      client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray)); 

      string valueString = "value"; 

      var con = new FormUrlEncodedContent(new[] 
      { 
       new KeyValuePair<string, string>("relevance", valueString) 
      }); 

      // Send a request asynchronously and continue when complete 
      HttpResponseMessage response = await client.PostAsync(_address, con); 

      // Check that response was successful or throw exception 
      response.EnsureSuccessStatusCode(); 

      var content = await response.Content.ReadAsStringAsync(); 
     } 
     catch (Exception ex) 
     { 

     } 
    }