2009-06-18 4 views
14

코드 보라 : 이제데이터를 게시 한 후 WebClient 응답을 읽는 방법?

using (var client = new WebClient()) 
{ 
    using (var stream = client.OpenWrite("http://localhost/", "POST")) 
    { 
     stream.Write(post, 0, post.Length); 
    } 
} 

을, 내가 어떻게 HTTP 출력을 읽습니까?

+0

는 또한 http://stackoverflow.com/questions/1694388/webclient-vs-httpwebrequest-httpwebresponse를 참조하십시오 여기

using (var client = new WebClientWithResponse()) { using (var stream = client.OpenWrite(myUrl)) { // open a huge local file and send it using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { file.CopyTo(stream); } } // get response as an array of bytes. You'll need some encoding to convert to string, etc. var bytes = client.Response; } 

그리고

는 사용자 정의 웹 클라이언트입니다. – DuckMaestro

답변

19

게시 할 데이터가 byte[] 인 것 같습니다. 이 경우 내가 기대에 당신은 쉽게 사용할 찾을 수 있습니다 :

byte[] response = client.UploadData(address, post); 

을 그리고 응답이 경우 텍스트, 뭔가 같은 :

string s = client.Encoding.GetString(response); 

(또는 Encoding의 선택 - 아마도 Encoding.UTF8)

+0

HTTP 500 응답을 읽지 않으려 고하면 예외가 발생합니다. 그러나 귀하의 답변은 반드시 질문의 요구 사항을 충족시켜야합니다. –

+0

그러면 질문을 명확하게 할 수 있습니다. 그것은 HttpWebRequest를 사용하여 포함될 수 있습니다 ... –

+0

질문에 계속 http://stackoverflow.com/questions/1015020/how-to-read-an-asp-net-internal-server-error-description-with-net –

2

스트림을 모든 곳에서 유지하면서 거대한 바이트 배열을 할당하지 않으려는 경우 (예 : 큰 파일을 게시하려는 경우) 좋은 방법이기는하지만 WebClient의 파생 버전으로도 수행 할 수 있습니다. 다음은이를 수행하는 샘플 코드입니다.

public class WebClientWithResponse : WebClient 
{ 
    // we will store the response here. We could store it elsewhere if needed. 
    // This presumes the response is not a huge array... 
    public byte[] Response { get; private set; } 

    protected override WebResponse GetWebResponse(WebRequest request) 
    { 
     var response = base.GetWebResponse(request); 
     var httpResponse = response as HttpWebResponse; 
     if (httpResponse != null) 
     { 
      using (var stream = httpResponse.GetResponseStream()) 
      { 
       using (var ms = new MemoryStream()) 
       { 
        stream.CopyTo(ms); 
        Response = ms.ToArray(); 
       } 
      } 
     } 
     return response; 
    } 
} 
관련 문제