gpt4 book ai didi

post - 为什么我的 WebAPI 服务器的 HttpWebRequest POST 方法失败?

转载 作者:行者123 更新时间:2023-12-01 05:49:40 24 4
gpt4 key购买 nike

我已经成功地从我的 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;”上失败行。

服务器报错是departments为空; deptSerialized 正在填充 JSON“记录”,所以...这里缺少什么?

更新

确实,指定 ContentType 确实解决了这个难题。此外,StatusCode 是“已创建”,使得上面的代码抛出异常,因此我将其更改为:

using (StreamReader sr = new StreamReader(httpWebResponse.GetResponseStream()))
{
MessageBox.Show(String.Format("StatusCode == {0}", httpWebResponse.StatusCode));
MessageBox.Show(sr.ReadToEnd());
}

...显示“StatusCode == Created”,后跟我创建的 JSON“记录”(数组成员?术语。?)。

最佳答案

您忘记设置正确的 Content-Type 请求 header :

webRequest.ContentType = "application/json";

您在 POST 请求的正文中写入了一些 JSON 负载,但您如何期望 Web API 服务器知道您发送的是 JSON 负载而不是 XML 或其他内容?您需要为此设置正确的 Content-Type 请求 header 。

关于post - 为什么我的 WebAPI 服务器的 HttpWebRequest POST 方法失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19435941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com