2010-08-16 4 views
6

안녕하세요 저는 Silverlight에서 웹 사이트로 일부 데이터를 게시하고 싶습니다.
다음과 같은 것을 발견했습니다 link ...
그러나 ....이 예제는 너무 정교해서 내 눈을 다 치게 만들었습니다.
또한 .. 플렉스 예 .. 우리는 훨씬 청소기/적은 코드 .. 참고로

내가 더 나은 솔루션이 있어야합니다라고 말하고 싶지만 ...Silverlight HTTP POST 몇 가지 변수, 간단한 예제 (최소 코드)

2 개 변수 (문자열)를 게시하고 읽은 out 결과 (문자열).

링크에서 솔루션 :

1. // C# 
    2. // Create a request object 
    3. HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(POST_ADDRESS, UriKind.Absolute)); 
    4. request.Method = "POST"; 
    5. // don't miss out this 
    6. request.ContentType = "application/x-www-form-urlencoded"; 
    7. request.BeginGetRequestStream(new AsyncCallback(RequestReady), request); 
    8. 
    9. // Sumbit the Post Data 
    10. void RequestReady(IAsyncResult asyncResult) 
    11. { 
    12.  HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; 
    13.  Stream stream = request.EndGetRequestStream(asyncResult); 
    14. 
    15.  // Hack for solving multi-threading problem 
    16.  // I think this is a bug 
    17.  this.Dispatcher.BeginInvoke(delegate() 
    18.  { 
    19.   // Send the post variables 
    20.   StreamWriter writer = new StreamWriter(stream); 
    21.   writer.WriteLine("key1=value1"); 
    22.   writer.WriteLine("key2=value2"); 
    23.   writer.Flush(); 
    24.   writer.Close(); 
    25. 
    26.   request.BeginGetResponse(new AsyncCallback(ResponseReady), request); 
    27.  }); 
    28. } 
    29. 
    30. // Get the Result 
    31. void ResponseReady(IAsyncResult asyncResult) 
    32. { 
    33.  HttpWebRequest request = asyncResult.AsyncState as HttpWebRequest; 
    34.  HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asyncResult); 
    35. 
    36.  this.Dispatcher.BeginInvoke(delegate() 
    37.  { 
    38.   Stream responseStream = response.GetResponseStream(); 
    39.   StreamReader reader = new StreamReader(responseStream); 
    40.  // get the result text 
    41.   string result = reader.ReadToEnd(); 
    42.  }); 
    43. } 

답변

7

WebClient를 사용하여 양식 데이터를 보낼 수 있습니다. 성공 확인에 신경 쓰지 않는다면 매우 짧을 것입니다 :

WebClient wc = new WebClient(); 
wc.Headers["Content-type"] = "application/x-www-form-urlencoded"; 
wc.UploadStringAsync(new Uri(postUrl), "POST", "val1=param1&val2=param2"); 
+0

이것은 훨씬 나아 보입니다. 나는 그것을 시험해 볼 것이다. .. –

3

특히 당신의 눈을 다치게 어떤 부분? 적은 코드? 이 모든 것을 하나의 도우미 클래스에서 이벤트로 감쌀 수 있으며, AS에서 샘플과 동일한 라인 수를 갖게됩니다. 플렉스 샘플이 없다면 AS3 샘플 =)입니다. AS3 변형은 하나의 콜백 밖에있는 단일 클래스로 (어도브에 의해) 래핑 된 것과 동일합니다. 또한 저는 여러분에게 상기시켜 드리고 싶습니다. 이것은 오래되지 않은 좋은 동기식 요청입니다. 이것은 비동기식이며, 항상 그렇게 못생긴 것입니다 (IMHO). 실버 라이트에는 동기화 네트워크가 없으므로 익숙해 져야한다고 생각합니다.

+0

C#의 경우 AS3에서만 2 개의 비동기 콜백이 필요합니다. 게시 데이터는 명령 줄에 인쇄하는 것만 큼 일반적인 것이므로 일부 헬퍼가 코드를 적게 사용하기를 기대합니다 ... –

관련 문제