3

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.?) を示しています。

4

1 に答える 1