使用 C# 和 HttpWebRequest 向端点发送 POST 请求
Posted
技术标签:
【中文标题】使用 C# 和 HttpWebRequest 向端点发送 POST 请求【英文标题】:Send a POST request to an endpoint with C# and HttpWebRequest 【发布时间】:2021-11-17 12:13:57 【问题描述】:使用以下代码(当然使用 GET 方法)向端点发送 GET 请求对我来说没有问题,但我无法执行 POST 请求。有人可以解释一下,我必须做什么才能发布示例性 JSON-Body 吗?
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Globalization;
using System.Net;
using System.Threading;
using System.IO;
using System.Text;
namespace RestTesting
class Program
static void Main(string[] args)
string url;
url = "https://server.APIEndpoint/REST/";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.Accept = "application/json";
request.KeepAlive = true;
request.Credentials = CredentialCache.DefaultCredentials;
Console.WriteLine("Request: 0 \"1\" ...", request.Method, request.RequestUri);
Console.WriteLine(request.Headers);
Console.WriteLine(request.ContentLength);
try
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(String.Format("Response: HTTP/0 1 (1:d)\n", response.ProtocolVersion, response.StatusCode));
Console.WriteLine(response.Headers);
string responseText;
using (var reader = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8))
responseText = reader.ReadToEnd();
Console.WriteLine(response.ContentType);
if (response.ContentType.StartsWith("application/json"))
JObject json = (JObject)JObject.Parse(responseText);
Console.WriteLine(json.ToString());
catch (Exception err)
Console.WriteLine(err);
Console.WriteLine("Press enter to close...");
Console.ReadLine();
这是一个 JSON 正文:
"reference": "Test",
"info": "additionalInfo",
"ID": null,
"confidential": false,
问题是:System.Net.WebException:远程服务器返回错误:(404)未找到。在 System.Net.HttpWebRequest.GetResponse() 在 RestTesting.Program.Main(String[] args)
当我尝试像下面那样发布 JSON-Body 时发生该错误(在 WebRequest.Create 方法之后):
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
string data = @"
"reference": "Test",
"info": "additionalInfo",
"ID": null,
"confidential": false,
";
streamWriter.Write(data);
非常感谢您!
【问题讨论】:
有什么问题?你得到错误异常是什么?你的代码没有编译吗?显然你正在发帖。 对不起,完全忘了提问题:System.Net.WebException:远程服务器返回错误:(404)未找到。在 System.Net.HttpWebRequest.GetResponse() 在 RestTesting.Program.Main(String[] args) 首先,如果您可以将这样的消息粘贴到问题中而不是 cmets,则更容易理解。其次,问题不是您的帖子要求,而是您发布的 URL 不存在。您需要检查 api/page 端点并确认它存在。 正确意味着那里有东西,但它没有读取您发送的内容。 为您的请求主体创建一个类对象,然后使用 Json.NET 对其进行序列化,并将序列化的对象写入请求流,确保您也为流编写器提供正确的Encoding
。这将确保您发送有效的 json。
【参考方案1】:
解决方案:我只是在 JSON-Body 的代码中忘记了逗号。
【讨论】:
以上是关于使用 C# 和 HttpWebRequest 向端点发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
使用 HttpWebRequest.Create 时的 C# vs VB 语法
C#使用HttpWebRequest发送数据和使用HttpWebResponse接收数据的一个简单示例
C# httpwebrequest - 使用系统库创建 json 主体
C# HttpWebRequest.GetResponse - 如何处理非异常与 webexception 响应的 StatusCode 使用情况?