Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何像在PHP中一样实现C#REST调用?_C#_Rest_Post - Fatal编程技术网

如何像在PHP中一样实现C#REST调用?

如何像在PHP中一样实现C#REST调用?,c#,rest,post,C#,Rest,Post,如何将以下REST调用方法从PHP转换为C#?我是C#新手,正在学习如何进行web API调用 当我运行下面的C代码时,会出现未经授权的错误。但在PHP中,它工作得很好 PHP代码: $service_url = 'https://www.addresscope.com/api/v1/upas/get'; $ch = curl_init(); $auth = "Authorization: xxxx-xxxx-xxxx-xxxx"; curl_setopt($ch, CURLOPT_URL,

如何将以下REST调用方法从PHP转换为C#?我是C#新手,正在学习如何进行web API调用

当我运行下面的C代码时,会出现未经授权的错误。但在PHP中,它工作得很好

PHP代码:

$service_url = 'https://www.addresscope.com/api/v1/upas/get';

$ch = curl_init();
$auth = "Authorization: xxxx-xxxx-xxxx-xxxx"; 
curl_setopt($ch, CURLOPT_URL, $service_url);
$curl_post_data = array( 'upas' => array("UPA000000")); 
$curl_post_data = http_build_query($curl_post_data); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $curl_post_data); 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, Array($auth)); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,  CURLOPT_SSL_VERIFYPEER , false);

$ch_result = curl_exec($ch);
if(curl_errno($ch)){  throw new Exception(curl_error($ch));  }
curl_close($ch);            

$curl_response = $ch_result;

$decoded = json_decode($curl_response); 
if (isset($decoded->status) && $decoded->status == 'error') 
{ 
  die('error occured: ' . $decoded->msg);     
} 
echo '<pre>';
echo 'response ok: '; var_dump($decoded);

通过这篇文章,我能够提出这个要求。 我用它来备课。 为了读者的利益,我发布了在C#中发出REST请求所需的内容。 希望有人会觉得这个有用


尝试以正确的方式添加标题,request.headers.add(“授权”,“xxxx xxxx xxxx”)。顺便说一下,您不应该隐式计算ContentLength,它是自动计算的。谢谢您的提示@DvTr。。正如您所说,我更改了标题,但仍然出现以下错误{“远程服务器返回了一个错误:(401)未经授权。”}一些服务器不允许所有内容类型。正如我所看到的,您在PHP中没有指定任何一个,但在c#中是“x-www-urlencoded-form”。顺便说一下,在PHP中指定忽略服务器证书(curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false)),但在c中不指定。也许问题是url获得了无效的证书,然后HttpWebRequest拒绝实现连接。感谢insights@DvTr。这也可能是原因。无论如何,我找到了工作代码示例。并且能够提出休息请求。请核对答案。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Net;
    using System.Text;
    using System.IO;
    using Newtonsoft.Json;
    using System.Net.Http;

    .......
    .......
    .......

    var request =  
    (HttpWebRequest) 
    WebRequest.Create("https://www.addresscope.com/api/v1/upas/get");
    var postData = "upas=[UPA000000]";            
    var data = Encoding.ASCII.GetBytes(postData);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";

    request.Headers["Authorization"] = "xxxx-xxxx-xxxx-xxxx";
    request.ContentLength = data.Length;
    using (var stream = request.GetRequestStream())            {
        stream.Write(data, 0, data.Length);            }

    var response = (HttpWebResponse)request.GetResponse();
    var responseString = new 
    StreamReader(response.GetResponseStream()).ReadToEnd();
    TextBox1.Text = responseString;                 
        var request = WebRequest.Create("https://www.addresscope.com/api/v1/upas/get");
        Stream dataStream;
        WebResponse response;
        String Status;
        string responseFromServer;
        string postData = "upas[]=UPA000000";
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);            
        request.ContentType = "application/x-www-form-urlencoded";
        request.Headers.Add("Authorization", "xxxx-xxxx-xxxx-xxxx-xxxx");            
        request.ContentLength = byteArray.Length;
        request.Method = "POST";
        dataStream = request.GetRequestStream();            
        dataStream.Write(byteArray, 0, byteArray.Length);            
        response = request.GetResponse();
        Status = ((HttpWebResponse)response).StatusDescription;            
        dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);            
        responseFromServer = reader.ReadToEnd();            
        reader.Close();
        dataStream.Close();
        response.Close();
        TextBox1.Text = responseFromServer;