WebAPI プロジェクト ("GET") からデータを正常に受信しましたが、投稿しようとしてもうまくいきません。関連するサーバー/WebAPI コードは次のとおりです。
public Department Add(Department item)
{
if (item == null)
{
throw new ArgumentNullException("item");
}
departments.Add(item);
return item;
}
...「departments.Add(item);」で失敗します クライアントからのこのコードが呼び出されたときの行:
const string uri = "http://localhost:48614/api/departments";
var dept = new Department();
dept.Id = 8;
dept.AccountId = "99";
dept.DeptName = "Something exceedingly funky";
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.Method = "POST";
var deptSerialized = JsonConvert.SerializeObject(dept); // <-- This is JSON.NET; it works (deptSerialized has the JSONized versiono of the Department object created above)
using (StreamWriter sw = new StreamWriter(webRequest.GetRequestStream()))
{
sw.Write(deptSerialized);
}
HttpWebResponse httpWebResponse = webRequest.GetResponse() as HttpWebResponse;
using (StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream()))
{
if (httpWebResponse.StatusCode != HttpStatusCode.OK)
{
string message = String.Format("POST failed. Received HTTP {0}", httpWebResponse.StatusCode);
throw new ApplicationException(message);
}
MessageBox.Show(sr.ReadToEnd());
}
...「HttpWebResponse httpWebResponse = webRequest.GetResponse() as HttpWebResponse;」で失敗します。ライン。
サーバー上のエラー メッセージは、部門が null であることです。deptSerialized には JSON の「レコード」が取り込まれているので、何が足りないのでしょうか?
アップデート
実際、ContentType を指定することで、ジレンマは解決されました。また、StatusCode が「Created」になっているため、上記のコードで例外がスローされるため、次のように変更しました。
using (StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream()))
{
MessageBox.Show(String.Format("StatusCode == {0}", httpWebResponse.StatusCode));
MessageBox.Show(sr.ReadToEnd());
}
...これは、"StatusCode == Created" の後に、作成した JSON "レコード" (配列メンバー? term.?) を示しています。