2016-08-17 10 views
1

投稿リクエストをRESTful APIに送信することに問題があります。 APIは、以下のJSON本体を期待:JSON文字列をRESTful APIにPOSTを使用して投稿するASP.NET MVC非同期

{ "APIKEY": "文字列コンテンツ"、 "ID": "文字列コンテンツ"、 "データ": "文字列 コンテンツ"、 "TokenScheme":0}

私は非同期を使用したいのですが、これは私のための最初のもので、リターン文字列を処理するだけの問題があります。私はちょうどビューに文字列データを送信する方法を知りたいと思うと私はそこからそれを取得します。

ここで私が使用しようとしているのですが、ブラウザは回転して回転します。

public async Task<string> RunAsync() 
{ 
    using (var client = new HttpClient()) 
    { 
     // TODO - Send HTTP requests 
     client.BaseAddress = new Uri("https://test-api.com/Services.svc/"); 
     client.DefaultRequestHeaders.Accept.Clear(); 
     client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

     string APIKey, ID, Data, Scheme; 

     // HTTP POST 
     string[] jsonRequest = { APIKey = "", ID = "", Data = "teststring", Scheme = "0" }; 
     //alt option IHttpActionResult 
     HttpResponseMessage response = await client.PostAsJsonAsync("REST/Service", jsonRequest); 
     if (response.IsSuccessStatusCode) 
     { 
      Debug.WriteLine(@"    successful."); 
      return ""; 
     } 
     else 
     { 
      Debug.WriteLine(@"    Failed."); 
      return ""; 
     } 
    } 
} 

答えて

1

ここでは2つの概念を混在させています。文字列配列には、プロパティ名やインデクサはなく、文字列のセットのみです。間違って、配列を作成している同じ行の変数に値を代入することによって、間違っているように見えます。

ので、この行:

string[] jsonRequest = { APIKey = "", ID = "", Data = "teststring", Scheme = "0" }; 

は、実際にこれをやっている:あなたの問題を解決するために

APIKey = ""; 
ID = ""; 
Data = "teststring"; 
Scheme = "0"; 

string[] jsonRequest = { "", "", "teststring", "0" }; // String array without property names 

最も簡単な方法は、代わりに[]

var jsonRequest = new { APIKey = "", ID = "", Data = "teststring", Scheme = "0" }; 
文字列の匿名型を使用することです

新しいオブジェクトの名前付きプロパティは次のとおりです。

if (jsonRequest.Data == "teststring") // returns true. 
+0

ありがとう、私は周りを微妙に変化していたときにそれを変更していたことを忘れていました。私がポストバックを行い、コードを呼び出すたびにそれが正しいと思うので、まだそこに座っています。これはところで非同期を使用して、私の最初の時間です... // POST:ホーム [HttpPost] 公共のActionResultインデックス(IndexViewModelモデル) { RunAsync()(WAIT);。 戻り値View(); } –

1

jsonは文字列[]として宣言しないでください。それはあなただけの匿名オブジェクトを作成し、PostAsJsonAsyncがあなたのためにJSONにあなたのオブジェクトを直列化処理するこの

var anonymousObject = new { APIKey = "", ID = "", Data = "teststring", TokenScheme = "0" }; 

HttpResponseMessage response = await client.PostAsJsonAsync("REST/Service", anonymousObject); 

ようPostAsJsonAsync

にそれを渡したい

[{ "APIKey":"String content"}, 
{"ID":"String content"}, 
{"Data":"String content"}, 
{"TokenScheme":0 }] 

のようなJSONを作成します。 。

関連する問題