2014-02-19 41 views
1

如何修改以下代碼以循環顯示文本文件而不是靜態'testData'字符串?代碼POST的第一塊工作,我嘗試使用循環是下面的第二塊代碼,但它不起作用。向C#中的POST添加循環#

<%@ Page Language="C#" Debug="true" %> 
<%@ Import Namespace="System.Net"%> 
<%@ Import Namespace="System.IO"%> 
<% 
    string url = "http://testurl.com/test"; 
    HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest; 
    HttpWebResponse response = null; 
    string user = "testuser"; 
    string password = "testpassword"; 
    string testData ="id=003&[email protected]&firstname=Test&lastname=User"; 
    byte[] byteData = Encoding.UTF8.GetBytes(mydata); 
    UTF8Encoding enc = new UTF8Encoding(); 
    request.Method = "POST"; 
    string auth = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(user + ":" + password)); 
    request.PreAuthenticate = true; 
    request.ContentType = "application/x-www-form-urlencoded"; 
    request.ContentLength = byteData.Length; 
    request.Accept = "application/json"; 
    request.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested; 
    request.Headers.Add("Authorization", auth); 
    using (Stream ds = request.GetRequestStream()) 
    { 
     ds.Write(byteData, 0, byteData.Length); 
     ds.Close(); 
    } 
    try 
    { 
     response = (HttpWebResponse)request.GetResponse(); 
    } 
    catch (WebException ex) 
    { 
     response = (HttpWebResponse)ex.Response; 
    } 
    Stream receiveStream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
    string content = reader.ReadToEnd(); 
    Response.Write(content); 
%> 

下不能正常工作,我得到了錯誤的的ContentLength線

<%@ Page Language="C#" Debug="true" %> 
<%@ Import Namespace="System.Net"%> 
<%@ Import Namespace="System.IO"%> 
<% 
    string url = "http://testurl.com/test"; 
    HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest; 
    HttpWebResponse wr = null; 
    string user = "testuser"; 
    string pwd = "testpassword"; 
    string fileName = @"C:\TestDir\Test.txt"; 
    string[] lines = System.IO.File.ReadAllLines(fileName); 
    foreach (string line in lines) 
    { 
     string mydata = line; 
     byte[] byteData = Encoding.UTF8.GetBytes(mydata); 
     UTF8Encoding enc = new UTF8Encoding(); 
     req.Method = "POST"; 
     string auth = "Basic " + Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(user + ":" + pwd)); 
     req.PreAuthenticate = true; 
     req.ContentType = "application/x-www-form-urlencoded"; 
     req.ContentLength = byteData.Length; 
     req.Accept = "application/json"; 
     req.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested; 
     req.Headers.Add("Authorization", auth); 
     using (Stream ds = req.GetRequestStream()) 
     { 
      ds.Write(byteData, 0, byteData.Length); 
      ds.Close(); 
     } 
     try 
     { 
      wr = (HttpWebResponse)req.GetResponse(); 
     } 
     catch (WebException ex) 
     { 
      wr = (HttpWebResponse)ex.Response; 
     } 
     Stream receiveStream = wr.GetResponseStream(); 
     StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8); 
     string content = reader.ReadToEnd(); 
     Response.Write(content); 
    } 
%> 
+2

我認爲你需要在foreach中提出一個新的請求 – Gus

+0

謝謝,那就是問題所在。 –

回答

2

將以下兩行是你foreach循環內「之後的寫作已經開始這個屬性不能設置」

HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest; 
HttpWebResponse wr = null; 

發生什麼事是你做了一個請求,然後循環再次進行並且請求已經被使用,所以當你觸及敏感時ContenLength屬性,請求不處於可以修改的狀態。你需要創建全新的請求,這是什麼將通過移動foreach循環內的這兩條線來完成

+0

謝謝,這是做到了。也謝謝你的解釋。 –

+0

@ kyle_13,不客氣! – LB2