2013-10-10 2 views
1

C# console 응용 프로그램을 사용하여 로컬 웹 사이트로 데이터를 보내고 있습니다. 데이터를 보내는 함수는 다음과 같습니다.C#에서 ASP 웹 사이트의 데이터를받는 방법?

public static HttpWebRequest GetRequest(String url, NameValueCollection nameValueCollection) 
    { 
     // Here we convert the nameValueCollection to POST data. 
     // This will only work if nameValueCollection contains some items. 
     var parameters = new StringBuilder(); 

     foreach (string key in nameValueCollection.Keys) 
     { 
      parameters.AppendFormat("{0}={1}&", 
       HttpUtility.UrlEncode(key), 
       HttpUtility.UrlEncode(nameValueCollection[key])); 
     } 

     parameters.Length -= 1; 

     // Here we create the request and write the POST data to it. 
     var request = (HttpWebRequest)HttpWebRequest.Create(url); 
     request.Method = "POST"; 

     using (var writer = new StreamWriter(request.GetRequestStream())) 
     { 
      writer.Write(parameters.ToString()); 
     } 

     return request; 
    } 

url 및 NameValueCollection이 올바른지 여부 하지만 웹 사이트에서는 아무 것도받을 수 없습니다. 웹 사이트 코드는 :

System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Current.Request.InputStream); 

    string requestFromPost = reader.ReadToEnd(); 
    Response.Write(requestFromPost); 

나는 asp.net을 처음 사용했습니다. 내가 뭘 놓치고 있니?

답변

1

시도해보십시오.

var parameters = new StringBuilder(); 

foreach (string key in nameValueCollection.Keys) 
{ 
    parameters.AppendFormat("{0}={1}&", 
     HttpUtility.UrlEncode(key), 
     HttpUtility.UrlEncode(nameValueCollection[key])); 
} 

parameters.Length -= 1; 

var request = (HttpWebRequest)WebRequest.Create(url); 
request.Method = "POST"; 
request.ContentType = "application/x-www-form-urlencoded"; 

// Every so often I've seen weird issues if the user agent isn't set 
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; 

// encode the data for transmission 
byte[] bytedata = Encoding.UTF8.GetBytes(parameters.ToString()); 

// tell the other side how much data is coming 
request.ContentLength = bytedata.Length; 

using (Stream writer = request.GetRequestStream()) 
{ 
    writer.Write(bytedata, 0, bytedata.Length); 
} 
String result = String.Empty; 

using (var response = (HttpWebResponse)request.GetResponse()) { 
    using(StreamReader reader = new StreamReader(response.GetResponseStream())) { 
     result = reader.ReadToEnd(); // gets the response from the server 
     // output this or at least look at it. 
     // generally you want to send a success or failure message back. 
    } 
} 

// not sure why you were returning the request object. 
// you really just want to pass the result back from your method 
return result; 

아마도 대부분 위의 내용을 try..catch에 포함하고 싶을 것입니다. 게시물이 실패하면 예외가 발생합니다.


수신 측에서는 약간 쉽습니다. 다음과 같이 할 수 있습니다.

String val = Request.QueryString["myparam"]; 

또는 쿼리 문자열 컬렉션을 반복하면됩니다.

+0

오류 : 매개 변수가 현재 컨텍스트 오류가 존재하지 않는이 : 바이트 [] [] – SparkWerk

+0

@SparkWerk를 숯불로 변환 할 수 없습니다 : 당신은 아직도 당신의 매개 변수를 구축 할 거라고 가정 ... 아이디어를 얻기 임 – NotMe

+0

업데이트. 그러나 byte []를 char [] error로 변환하는 방법 : byte []를 char []로 변환 할 수 없습니까? – SparkWerk

관련 문제