MVC 5アプリケーションを実行していますが、別のソリューションにあるAPIコントローラメソッドを呼び出しています。MVC ApiコントローラSerielizedパラメータ
私はHttpClient()
を使用しています。私はPostAsJsonAsync
にいくつかのパラメータ、クラスのインスタンスを呼び出しています。
このようになります。
string apiUrl = "localhost:8080/api/";
ContactWF contactWF = new contactWF();
contactWF.contact_id=0;
contactWF.UserOrigin_id=20006
contactWF.ProcessState_id=2;
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(apiUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await client.PostAsJsonAsync(apiUrl + "Contact/Method", contactWF);
if (response.IsSuccessStatusCode)
{
return response.Content.ReadAsAsync<int>().Result;
}
}
APIコントローラのメソッドは次のとおりです。
[ActionName("Method")]
[HttpGet]
public int Method([FromBody] ContactWF userwf)
{
return 10;
}
それは罰金作品...
私の問題は、私は直列化されたパラメータクラスのインスタンス をしようとしたとき、私はこの1つ
string jsonData = JsonConvert.SerializeObject(contactWF);
HttpResponseMessage response = client.PostAsJsonAsync("api/Contact/Method", jsonData).Result;
でライン
HttpResponseMessage response = await client.PostAsJsonAsync(apiUrl + "Contact/Method", contactWF);
を交換ですError:405
...
Json
文字列のように見えますが、パラメータとして認識されません。
My Jsonの文字列は次のようになります。
"{\"Contact_id\":0,\"Description\":null,\"ProcessState_id\":2,\"Type_id\":0,\"Object_id\":0,\"Parent_id\":null}"
これは、jsonへのContactWDクラスコンバータです。
どうしたのですか?あなたのAPIコントローラでHttpPostへ
ありがとう...私は2回連れていた...しかし、私が理解していないことは、私がPostAsJsonAsyncを使用している場合、方法は文字列を取得する必要がありますか?今度は、同じクラスのインスタンスを取得します...ありがとう – Diego
Web Apiは、メソッドのargumetクラスにjsonボディを非直列化します。 'public int Method([FromBody] string userwf)'と宣言すれば、2回直列化されたオブジェクトを持つ2番目の変種が動作し、userwf直列化オブジェクトに入ります。 –