Аутентификация с помощью SoapHttpClientProtocol

Мне нужно запросить веб-сервисы через конечную точку переднего плана. Я использую базовую аутентификацию. это прекрасно работает, если я использую этот код:

Uri uri = new Uri("https://ged.legrandnarbonne.com/_vti_bin/webs.asmx");
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);

        System.Net.CredentialCache credentialCache = new System.Net.CredentialCache();
        credentialCache.Add(
            new System.Uri("https://xxx.com"),
            "Basic",
            new System.Net.NetworkCredential("xxx", "xxxx")
        );
        string postData = @"<?xml version='1.0' encoding='utf-8'?><soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'><soap:Body><GetWeb xmlns='http://schemas.microsoft.com/sharepoint/soap/'><webUrl>https://ged.legrandnarbonne.com</webUrl></GetWeb></soap:Body></soap:Envelope>";
        byte[] byteArray = Encoding.UTF8.GetBytes (postData);
        request.ContentType = "text/xml; charset=utf-8";

        request.Credentials=credentialCache;
        request.Method = "POST";
        request.ContentLength=byteArray.Length;
        Stream dataStream = request.GetRequestStream ();
        dataStream.Write (byteArray, 0, byteArray.Length);
        dataStream.Close ();

        WebResponse v = request.GetResponse();
        Stream rStream = v.GetResponseStream();
        StreamReader str = new StreamReader(rStream);
        if (str.EndOfStream != true)
        {
            Console.WriteLine(str.ReadToEnd());
        }
        v.Close();
        rStream.Close();
        str.Close();

Я получил ответ 401, а затем отправка аутентификации, и я получил ответ.

Если я использую SoapHttpClientProtocol, у меня есть ответ 302, и я не знаю, как с этим справиться. Не могли бы вы помочь мне.

1 ответ

После долгого исследования похоже, что перенаправление происходит из-за заголовка "useragent". если он установлен, TMG отправляет 302, чтобы перенаправить запрос на страницу входа. Если оставить поле пустым, оно будет работать идеально. Надеюсь, что это может кому-то помочь.

Другие вопросы по тегам