2017-09-17 13 views
-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;     
+0

ヘッダに正しい方法を追加しようと、request.Headers.Add( "認可"、 "XXXX-XXXX-XXXX-XXXX")。ところで、ContentLengthを暗黙に計算するべきではありません。それは自動的です。 – DvTr

+0

あなたのヒントをお寄せいただきありがとうございます。あなたが言ったようにヘッダーを変更しましたが、次のエラー({"リモートサーバーからエラーが返されました:(401)Unauthorized"})が表示されます。 –

+0

一部のサーバーはすべてのコンテンツタイプを許可していません。私が見ることができるように、あなたはあなたのPHPで任意のものを指定するのではなく、あなたのC#で 'x-www-urlencoded-form'を指定します。ちなみに、PHPではサーバ証明書(curl_setopt($ ch、CURLOPT_SSL_VERIFYPEER、false);)を無視するように指定しますが、C#では無視しません。おそらく問題は、URLに無効な証明書があり、HttpWebRequestが接続を実現するのを拒否することです。 – DvTr

答えて

0

私はhttp://codesamplez.com/programming/http-request-c-sharpを通じてこのポストを行く後に要求を行うことができました。 私はこれを使って自分のクラスを準備しました。読者の便宜のために 私はC#でRESTリクエストを行うために必要なものを投稿します。 誰かがこれが役に立つと思うことを願っています。

 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; 
関連する問題