在c#的RESTfull/HTTP请求中添加报头和Post数据

本文关键字:报头 添加 Post 数据 请求 RESTfull HTTP | 更新日期: 2023-09-27 18:04:23

我在c#中发送POST请求有问题,似乎我误解了一些HTTP基础知识。所以基本上我是实现RESTfull服务客户端,其工作如下:

  1. 使用用户名/密码发送POST请求并获取令牌
  2. 在发出其他GET/POST/PUT请求时,在header (Authorization: token)中使用此令牌

我使用WebRequest使GET请求(与授权头),它的工作。但是,当我使用以下代码进行PUT请求时,服务返回"身份验证失败-未登录"消息:

String url = String.Format("{0}/{1}", AN_SERVER, app);
WebRequest theRequest = WebRequest.Create(url);
theRequest.Method = "POST";
theRequest.ContentType = "text/x-json";
theRequest.ContentLength = json.Length;
Stream requestStream = theRequest.GetRequestStream();
requestStream.Write(Encoding.ASCII.GetBytes(json), 0, json.Length);
requestStream.Close();

theRequest.Headers.Add("Authorization", authToken);
HttpWebResponse response =  (HttpWebResponse)theRequest.GetResponse();

我一定是犯了一个小错误(至少我希望如此),而发送POST请求。那么我做错了什么呢?

谢谢。

在c#的RESTfull/HTTP请求中添加报头和Post数据

在请求蒸汽工作之前移动报头(根据AI W的评论),因为请求流正在添加正文。

webrequest在内部实现的方式是,你需要在写正文之前完成报头,一旦它变成流格式,它就可以发送了。

如果你在反射器或一些反编译工具中查看webrequest的实现,你将能够看到逻辑。

希望能有所帮助