当前位置: 首页 > 知识库问答 >
问题:

C#使用httpWebRequst发布json对象

呼延钱明
2023-03-14

我需要以这种格式发布一个对象:

POST https://link
{
  "country": "nld",
  "emailaddress": "email@domain.com",
  "phone": "123",
  "notify_url": "https://asd.com"
}

我试过:

 var url = "URL";
            var httpRequest = (HttpWebRequest)WebRequest.Create(url);
            httpRequest.Accept = "*/*";
            httpRequest.Headers["Authorization"] = "Bearer " + apiKey;


            var postData = "country" + Uri.EscapeDataString("hello");
            postData += "emailaddress" + Uri.EscapeDataString("world");
            postData += "phone" + Uri.EscapeDataString("123");
            postData += "notify_url" + Uri.EscapeDataString("d3wq");
            var data = Encoding.ASCII.GetBytes(postData);

            httpRequest.Method = "POST";
            httpRequest.ContentType = "application/x-www-form-urlencoded";
            httpRequest.ContentLength = data.Length;

            using (var stream = httpRequest.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }
 
            HttpWebResponse httpResponse = null;
            try
            {
                httpResponse = (HttpWebResponse)httpRequest.GetResponse();

                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                }
            }
            catch (Exception e) { }

但是服务器返回了一个错误的请求。我认为数据的格式无效。

如何更改代码以将数据转换为正确的格式?

谢谢你!

共有2个答案

柳培
2023-03-14

创建需要在webrequest上提交的对象

var xObject = new { xData = ... };

在那次使用之后;

var newJsonData = JsonSerializer.Serialize(xObject);

NewJsonData是一个JSON格式的字符串,您可以将其发布到您的网络请求中。

申浩广
2023-03-14

您显示的示例请求显示了一个JSON请求体,但您在HttpWebRequest中告诉服务器,传入的内容类型将是一个表单post。但是,您不发布表单post,而是发布一个长字符串:

countryhelloemailaddressworldphone123 // and so on 

不要在2021使用HTTPWebRestQuest.这是一个已有20年历史的API,到目前为止,它已经有了更多对开发人员友好的替代方案。

改用HttpClient,它具有发送和接收JSON的方便(扩展)方法:

var postModel = new
{ 
    country = "...", 
    emailaddress = "...", 
    ... 
}; 

var client = new HttpClient();

var response = await client.PostAsJsonAsync(postModel);

您需要安装Microsoft。AspNet。WebApi。客户端NuGet该扩展方法的包。

如果您坚持必须使用HttpWebRequest,我对此深表怀疑,那么您的问题将在如何使用C#向服务器发布JSON中得到回答?,这个问题和答案展示了如何使用那个古老的API。

 类似资料:
  • 问题内容: 我正在尝试将JSON发布到WCF服务。json对象包含一个数组。我想知道如何正确绑定到我的数据合同。如果有人可以在这里给我指点,我将不胜感激。目前,我的购物车对象为null 我的服务界面如下所示: 我的客户电话如下 客户电话 我的JSON看起来像这样 问题答案: Fiddler对WCF REST方法的原始请求应如下所示: JSON中的响应如下所示:

  • 这就是我如何尝试使用RestTemplate调用服务器, 这就是我如何使用它(用于测试) 我的登录响应类及其子类, null null null null 公共类BaseResponse{ 受保护字符串StatusCode; 我的问题是,1。为什么调用服务器时会出现此错误 信息:org.springframework.beans.factory.support.defaultListableBea

  • 应用程序(Android): 在我运行这个应用程序的手机中,我嗅出了数据,我看到应用程序向服务器发送了一个请求,但数据包不包含json

  • 问题内容: 我正在尝试使用RestSharp发布以下JSON: 我想我已经接近了,但是我似乎在为 SecurityQuestion 苦苦挣扎(API抛出错误,表明缺少参数,但没有说明是哪个参数) 这是我到目前为止的代码: 我的安全问题类如下所示: 谁能告诉我我在做什么错?还有其他方法可以发布安全性问题对象吗? 非常感谢。 问题答案: 您需要在标题中指定content-type: 还根据方法添加到P

  • 我正在做一个项目,我请求一个api发布一个项目的详细信息。下面是我试图使用HttpRequest插入body itemstr的代码 这是我的newItem类 我试图将itemStr作为一个主体发布到本地运行的restful API。我可以使用GET请求检索,但不能发布。

  • 问题内容: 我已经开始尝试使用Django REST框架。到目前为止,我已经成功地为我的对象创建了一个序列化程序,通过Javascript的$ .post()创建了发布视图,发布对象和返回对象。因此,现在我可以在JSON和Django模型对象之间进行适当的转换。 问题是我有一个对象数组[A1,A2,…,An]。现在,当我需要发布这样的数组时,我逐个对象地进行处理。是否有可能一次发布整个数组,并在D