веб-клиент и ожидаем 100 продолжения - PullRequest
8 голосов
/ 07 мая 2010

Каков наилучший способ установить continue100continue при использовании WebClient (C # .NET). У меня есть этот код ниже, я все еще вижу 100 продолжить в шапке. Глупый апач все еще жалуется с ошибкой 505.

        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);

Примечание: если я добавлю вышеупомянутое в консольное приложение и позволю ему работать - тогда я не увижу заголовки в fiddler. Но мой код встроен в пользовательскую библиотеку, которая загружается приложением WPF. Итак, есть ли у Expect100Continue больше с точки зрения потоков, инициализации и т. Д. Теперь я думаю, что это больше проблема моего кода.

Ответы [ 4 ]

8 голосов
/ 28 декабря 2010

Вам необходимо установить свойство Expect100Continue для ServicePoint, используемого для URI, к которому вы обращаетесь:

var uri = new Uri("http://foo.bar.baz");
var servicePoint = ServicePointManager.FindServicePoint(uri);
servicePoint.Expect100Continue = false;
4 голосов
/ 02 апреля 2017

Единственный способ сделать это - создать переопределение.

   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;
        }
    }

Это прекрасно работает.

2 голосов
/ 28 декабря 2010

Попробуйте создать экземпляр WebClient после изменения значения Expect100Continue на false. Или используйте Webrequest вместо WebClient

0 голосов
/ 23 мая 2018

Один из моих подходов ниже также работал,

В моем конструкторе класса (вызов службы) вы можете установить System.Net.ServicePointManager.Expect100Continue = false;

, а затем я создал объект BasicHttpBinding и продолжилвыполнено успешно.

...