21

APIを使用していて、C#内でJSONPUTリクエストを実行しようとしています。これは私が使用しているコードです:

    public static bool SendAnSMSMessage()
    {
        var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://apiURL");
        httpWebRequest.ContentType = "text/json";
        httpWebRequest.Method = "PUT";

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {
            string json = **// Need to put data here to pass to the API.**

            streamWriter.Write(json);
        }
        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            var responseText = streamReader.ReadToEnd();
            //Now you have your response.
            //or false depending on information in the response
            return true;
        }
    }

問題は、データをAPIに渡す方法がわからないことです。したがって、JavaScriptの場合と同様に、データを渡すために次のようなことを行います。

        type: 'PUT',
        data: { 'reg_FirstName': 'Bob',
                'reg_LastName': 'The Guy',
                'reg_Phone': '123-342-1211',
                'reg_Email': 'someemail@emai.com',
                'reg_Company': 'None',
                'reg_Address1': 'Some place Dr',
                'reg_Address2': '',
                'reg_City': 'Mars',
                'reg_State': 'GA',
                'reg_Zip': '12121',
                'reg_Country': 'United States'

C#で同じことをするにはどうすればよいですか?ありがとう!

4

2 に答える 2

18
httpWebRequest.ContentType = "text/json";

間違いなく:

httpWebRequest.ContentType = "application/json";

それ以外は、現在のコードに問題はありません。

JSON生成部分に関する限り、JSONシリアライザーを使用できます。

var serializer = new JavaScriptSerializer();

string json = serializer.Serialize(new 
{
    reg_FirstName = "Bob",
    reg_LastName = "The Guy",
    ... and so on of course
});

この例では、明らかに匿名オブジェクトを使用しましたが、プロパティが一致するモデルを完全に細かく定義してから、このモデルのインスタンスをSerializeメソッドに渡すことができます。また、組み込みの.NETよりも軽量で高速なサードパーティのJSONシリアライザーであるJson.NETライブラリをチェックアウトすることもできます。


とはいえ、ASP.NETWebAPIや今後の.NET4.5についても聞いたことがあるかもしれません。そうした場合HttpClient、それらのニーズに合わせて特別に調整されたAPI HTTP Webクライアント()があることに注意する必要があります。を使用しWebRequestてJSON対応のAPIを使用すると、数か月以内に廃止されたコードと見なされます。NuGetを使用してこの新しいクライアントを今すぐ使用し、数年後、おそらくコードを確認する貧しい人々(コードを.NET XXに移行するタスク)の生活を簡素化できるため、これについて言及します。 aが何であるかさえ知らないでしょうWebRequest:-)

于 2012-06-28T16:25:51.837 に答える
12

.NET C#クライアントからのJavaScriptの動作を模倣する場合は、ContentTypeとは別に、Requestオブジェクトにいくつかの追加の構成を設定する必要があります。実際の例を次に示します。

string serializedObject = Newtonsoft.Json.JsonConvert.SerializeObject(entity);
HttpWebRequest request = WebRequest.CreateHttp(storeUrl);
request.Method = "PUT";
request.AllowWriteStreamBuffering = false;
request.ContentType = "application/json";
request.Accept = "Accept=application/json";
request.SendChunked = false;
request.ContentLength = serializedObject.Length;
using (var writer = new StreamWriter(request.GetRequestStream()))
{
    writer.Write(serializedObject);
}
var response = request.GetResponse() as HttpWebResponse;

このようにして、完全なコンテンツが要求とともに送信されるため、ASP.NETMVCWebAPIデータバインダーは魔法のように機能します。

言うまでもなく、コンテンツのサイズは、ストリーミング/チャンク化されるのではなく、一度に送信されるため、注意が必要です。

于 2013-11-26T13:21:46.810 に答える