2015-08-15 34 views
3

我正在为我的Web API MVC应用程序构建测试,并试图发送POST请求。我需要发送一个cookie,然后阅读我从回复中得到的内容。用Cookie发送POST请求并获取内容

我试图用HttpWebRequest并将其与饼干(我得到的StatusCode OK)伟大的工作,但我不能读取响应内容:

public static HttpWebResponse WebRequest(string methodURL, string method, string json, HttpCookie cookie) 
     { 
      string URL = baseURL + methodURL; 
      HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.CreateHttp(URL); 
      httpWebRequest.ContentType = "text/json"; 
      httpWebRequest.Method = method; 
      httpWebRequest.Headers.Add("Cookie", cookie.Name+"="+cookie.Value); 
      using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) 
      { 
       streamWriter.Write(json); 
       streamWriter.Close(); 
      } 
      try 
      { 
       return (HttpWebResponse)httpWebRequest.GetResponse(); 
      } 
      catch (System.Net.WebException ex) 
      { 
       using (WebResponse response = ex.Response) 
       { 
        return (HttpWebResponse)response; 
       } 
      } 
     } 

然后我试图使用HttpResponseMessage得到内容回来,但我无法发送正确的cookie - 我得到StatusCode“未经授权”。

public static HttpResponseMessage WebRequest(string methodURL, string method, string json, HttpCookie cookie) 
     { 
      string URL = baseURL + methodURL; 

      HttpClient client = new HttpClient(); 
      client.BaseAddress = new Uri(URL); 
      client.DefaultRequestHeaders 
        .Accept 
        .Add(new MediaTypeWithQualityHeaderValue("text/json")); 
      client.DefaultRequestHeaders.Add("Cookie", cookie.Name + "=" + cookie.Value); 

      HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, URL); 
      request.Content = new StringContent(json, Encoding.UTF8, "text/json"); 
      request.Headers.Add("Cookie", cookie.Name + "=" + cookie.Value); 
      request.Properties.Add("Cookie", cookie.Name + "=" + cookie.Value); 
      Task<HttpResponseMessage> r = client.SendAsync(request) 
       .ContinueWith(responseTask => 
       { 
        HttpResponseMessage message = responseTask.Result; 
        message.Headers.Add("Cookie", cookie.Name + "=" + cookie.Value); 
        return message; 

       }); 
      return r.Result; 
     } 

任何想法?

回答

0

对于第一种方式,你必须使用一个cookieContainer

httpWebRequest.CookieContainer = new CookieContainer(); 
httpWebRequest.CookieContainer.Add(cookie); 

阅读,你可以使用类似这样的反应,

var responseStr = new StringBuilder(); 
try 
{ 
    var response = (HttpWebResponse) httpWebRequest.GetResponse(); 
    var responseCode = response.StatusCode; 

    var receiveStream = response.GetResponseStream(); 
    if (receiveStream != null) 
    { 
     var instr = new StreamReader(receiveStream, Encoding.UTF8); 
     String inputLine; 
     while ((inputLine = instr.ReadLine()) != null) 
     { 
      responseStr.Append(inputLine); 
     } 
     instr.Close(); 
    } 
} catch (Exception e) 
{ 
} 
+0

我没有“client.CookieContaine” – TamarG

+0

在你的情况下会是httpWebRequest.CookieContainer – davcs86