如何像在PHP中一样实现C#REST调用?
如何将以下REST调用方法从PHP转换为C#?我是C#新手,正在学习如何进行web API调用 当我运行下面的C代码时,会出现未经授权的错误。但在PHP中,它工作得很好 PHP代码:如何像在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,
$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;