Почему я не могу добавить базовую авторизацию в заголовок SOAP? - PullRequest
1 голос
/ 19 сентября 2019

myAPI - это имя ссылки на веб-сервис, которую я добавил в свой проект, и я пытаюсь отправить Basic Authorization в заголовок SOAP-запроса с использованием C #, но это не происходит независимо от того, какой метод я пробую.

Я много читал в Интернете, и в результате я нашел следующие способы, но ни один из них не работает с моим.

То, что я пробовал:

Метод 1: без ошибок, но ничего не делает

  NetworkCredential netCredential = new NetworkCredential("un", "pw");
  Uri uri = new Uri(resol.Url);
  ICredentials credentials = netCredential.GetCredential(uri, "Basic");
  myAPI.Credentials = credentials;
  myAPI.PreAuthenticate = true;

Метод 2: (FYI ResolvingBinding (ниже) в основном состоит из всего моего метода, который исходит из ссылки на службу myAPI), нопроблема в том, что «клиент» не имеет никакого определения для InnerChannel и ClientCredential, поэтому этот метод тоже не работает

myAPI.ResolvingBinding client = new myAPI.ResolvingBinding();
using (OperationContextScope scope = new OperationContextScope(client.InnerChannel))
{
    var httpRequestProperty = new HttpRequestMessageProperty();
    httpRequestProperty.Headers[System.Net.HttpRequestHeader.Authorization] = "Basic " +
                 Convert.ToBase64String(Encoding.ASCII.GetBytes(client.ClientCredentials.UserName.UserName + ":" +
                 client.ClientCredentials.UserName.Password));
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = httpRequestProperty;

    client.DoSomething();
}

Моя конечная цель - закодировать имя пользователя: пароль в базу 64, которую я пытался ввторой пример.Как мне решить эту проблему?Пожалуйста, не стесняйтесь добавлять комментарии / оставлять предложения или указывать на ошибки, которые я мог упустить из виду.

1 Ответ

0 голосов
/ 19 сентября 2019

Этот код должен добавить вашу базовую аутентификацию в ваш заголовок

var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(<userId> + ":" +<pw>);
string val = System.Convert.ToBase64String(plainTextBytes);
string textValue = "Basic " + val;
httpRequestProperty.Headers.Add("Authorization", textValue);
...