2010-05-06 5 views
8

WebClient (C# .NET)를 사용할 때 expect100continue를 설정하는 가장 좋은 방법은 무엇입니까? 나는이 코드를 아래에 가지고있다. 어리석은 아파치는 여전히 505 오류로 불평합니다.webclient 및 expect100continue

 string url = "http://aaaa.com"; 
     ServicePointManager.Expect100Continue = false; 

     WebClient service = new WebClient();   
     service.Credentials = new NetworkCredential("username", "password"); 
     service.Headers.Add("Content-Type","text/xml"); 

     service.UploadStringCompleted += (sender, e) => CompleteCallback(BuildResponse(e)); 
     service.UploadStringAsync(new Uri(url), "POST", query); 

참고 : 위의 내용을 콘솔 앱에 넣고 실행 시키면 피들러에 헤더가 표시되지 않습니다. 하지만, 내 코드는 WPF 응용 프로그램에 의해로드 된 사용자 라이브러리에 포함되어 있습니다. 그래서 스레드, 초기화 등에서 Expect100Continue에 더 많은 것이 있습니까? 이제는 내 코드 문제가 더 중요하다고 생각합니다.

답변

7

대신 Webrequest를 사용

var uri = new Uri("http://foo.bar.baz"); 
var servicePoint = ServicePointManager.FindServicePoint(uri); 
servicePoint.Expect100Continue = false; 
1

Expect100Continue를 false로 변경 한 후 WebClient instanse를 ​​만들어보십시오. 또는 당신은 URI 당신이 액세스하는 사용되는 ServicePointExpect100Continue 속성을 설정할 필요가 WebClient

1

이 작업을 수행 할 수있는 유일한 방법은 재정의를 만드는 것입니다.

public class ExpectContinueAware : System.Net.WebClient 
    { 
     protected override System.Net.WebRequest GetWebRequest(Uri address) 
     { 
      System.Net.WebRequest request = base.GetWebRequest(address); 
      if (request is System.Net.HttpWebRequest) 
      { 
       var hwr = request as System.Net.HttpWebRequest; 
       hwr.ServicePoint.Expect100Continue = false; 
      } 
      return request; 
     } 
    } 

완벽하게 작동합니다.

+0

허용되는 답변이어야합니다. 이 접근 방식만으로 요청 당 기대치를 설정할 수 있습니다 –