2010-05-06 24 views
8

使用WebClient(C#.NET)時,設置expect100繼續的最佳方法是什麼?我有下面的代碼,我仍然看到100頭繼續。愚蠢的Apache仍然抱怨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

您需要設置用於您所訪問的URI的ServicePointExpect100Continue屬性:

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

嘗試在將Expect100Continue更改爲false後創建WebClient實例。或使用Webrequest而不是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

這應該是被接受的答案。只有這種方法可以根據請求設置Expect100Continue – 2017-09-07 12:06:52