在C#中的RESTful / HTTP请求中添加标头和发布数据

时间:2011-08-02 22:14:21

标签: c# .net http restful-authentication

我在使用C#发送POST请求时遇到问题,似乎我误解了一些HTTP基础知识。所以基本上我正在实现RESTfull服务客户端,其工作原理如下:

  1. 使用用户名/密码发送POST请求并获取令牌
  2. 在制作其他GET / POST / PUT请求时,在标题(授权:TOKEN)中使用此标记
  3. 我使用WebRequest发出GET请求(使用Authorization标头)并且它正在运行。但是,当我使用以下代码发出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请求时,我一定是犯了一个小错误(至少我希望如此)。那么我做错了什么?

    感谢。

1 个答案:

答案 0 :(得分:9)

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

webrequest在内部实现的方式,你需要在写主体之前完成标题,一旦它以流格式,它就可以发送了。

如果你看一下反射器或某种反编译工具中webrequest的实现,你就能看到逻辑。

希望这有帮助