-2
以下のREST呼び出しメソッドをPHPからC#に変換する方法は?私はC#の初心者で、Web APIコールを行う方法を学んでいます。PHPのようにC#REST呼び出しを実装する方法は?
次の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#コード:
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;
ヘッダに正しい方法を追加しようと、request.Headers.Add( "認可"、 "XXXX-XXXX-XXXX-XXXX")。ところで、ContentLengthを暗黙に計算するべきではありません。それは自動的です。 – DvTr
あなたのヒントをお寄せいただきありがとうございます。あなたが言ったようにヘッダーを変更しましたが、次のエラー({"リモートサーバーからエラーが返されました:(401)Unauthorized"})が表示されます。 –
一部のサーバーはすべてのコンテンツタイプを許可していません。私が見ることができるように、あなたはあなたのPHPで任意のものを指定するのではなく、あなたのC#で 'x-www-urlencoded-form'を指定します。ちなみに、PHPではサーバ証明書(curl_setopt($ ch、CURLOPT_SSL_VERIFYPEER、false);)を無視するように指定しますが、C#では無視しません。おそらく問題は、URLに無効な証明書があり、HttpWebRequestが接続を実現するのを拒否することです。 – DvTr