2015-11-15 65 views
0

我正在将一些python脚本转换为它的C#等价物。当我运行下面的脚本(使用请求模块),服务器是高兴,有一个与它没有任何问题:C#相当于requests.post()函数

auth_header = {'Authorization': 'Bearer ' + access_token} 
r = requests.post(api_url + '/v1/instances', headers=auth_header, json =params) 

然而,当我运行下面的C#等价代码,服务器返回“405不允许的方法“:

HttpClient client = new HttpClient(); 
client.BaseAddress = new Uri(api_url); 

client.DefaultRequestHeaders.Authorization = new 
      System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", access_token); 
      // Add an Accept header for JSON format. 
      client.DefaultRequestHeaders.Accept.Add(
      new MediaTypeWithQualityHeaderValue(@"application/json")); 
      string jsonDumps = JsonConvert.SerializeObject(parameters); 
      var content = new StringContent(jsonDumps, Encoding.UTF8,@"application/json"); 
      var postResult = client.PostAsync(@"v1/pipelines", content).Result; // ERROR: 
      //StatusCode: 405, ReasonPhrase: 'METHOD NOT ALLOWED'. 

值得注意的是,有没有问题,当我运行GET方法:

var response = client.GetAsync(@"v1/pipelines").Result; 

我没有访问服务器代码。我尝试使用Fiddler(类似于线鲨鱼)来查看Python代码发送到服务器的内容,但是使用Fiddler导致python脚本无法正常工作,指出SSLError:CERTIFICATE_VERIFY_FAILED]。

+1

我认为你发布到两个不同的端点 - Python到/ v1 /实例和C#到/ v1 /管道。尝试交换他们,看看会发生什么。 – Gnat

+0

哇!我不敢相信我犯了这样一个小错误。我浪费了3天时间。它现在有效。请把你的评论作为答案。 –

+0

我们都去过那里! :-)答案已发布。 – Gnat

回答

1

乍一看,C#代码看起来是正确的。不过,我认为你要发布到两个不同的端点:Python到/ v1 /实例和C#到/ v1 /管道。尝试交换他们,看看会发生什么。