c#HttpWebRequest和HttpWebResponse泛型的东西

时间:2015-06-18 09:31:17

标签: c# httpwebrequest httpwebresponse

我正在玩一个使用HttpWebRequest的应用来与网络服务器对话。

我按照我在网上找到的标准说明来构建我的请求函数,我尽量使其尽可能通用(我试着获得一个独特的方法,无论方法如何:PUT,POST,DELETE,REPORT,... )

当我提交“REPORT”请求时,我的服务器上有两个访问日志:

1)在调试器中启动以下行后,我得到响应401

reqStream.Write(Encoding.UTF8.GetBytes(body), 0, body.Length);

2)在通过调用Request.GetResponse();的行后,我得到了响应207(多次获取,这是我的期望)

实际上,它似乎是第一次查询服务器的Request.GetRequestStream()行,但请求只在通过reqStream.Write(...)行后提交...

对于PUT和DELETE,Request.GetRequestStream()再次在我的服务器上生成401访问日志,而Request.GetResponse();返回代码204.

我不明白为什么对于一个唯一的请求我有两个服务器访问日志,特别是一个似乎什么都不做,因为它总是返回代码401 ...任何人都可以解释发生了什么上?由于我试图获得多种方法的通用代码,这是我的代码中的缺陷还是糟糕的设计?

这是我的完整代码:

public static HttpWebResponse getHttpWebRequest(string url, string usrname, string pwd, string method, string contentType, 
                                       string[] headers, string body) {
  // Variables.
  HttpWebRequest Request;
  HttpWebResponse Response;
  //
  string strSrcURI = url.Trim();
  string strBody = body.Trim();
  try {
    // Create the HttpWebRequest object.
    Request = (HttpWebRequest)HttpWebRequest.Create(strSrcURI);

    // Add the network credentials to the request.
    Request.Credentials = new NetworkCredential(usrname.Trim(), pwd);

    // Specify the method.
    Request.Method = method.Trim();

    // request headers
    foreach (string s in headers) {
      Request.Headers.Add(s);
    }

    // Set the content type header.
    Request.ContentType = contentType.Trim();

    // set the body of the request...
    Request.ContentLength = body.Length;
    using (Stream reqStream = Request.GetRequestStream()) {
      // Write the string to the destination as a text file.
      reqStream.Write(Encoding.UTF8.GetBytes(body), 0, body.Length);
      reqStream.Close();
    }

    // Send the method request and get the response from the server.
    Response = (HttpWebResponse)Request.GetResponse();

    // return the response to be handled by calling method...
    return Response;
  }
  catch (Exception e) {
    throw new Exception("Web API error: " + e.Message, e);
  }

0 个答案:

没有答案