2015-10-01 7 views
0

Я получаю данные от API Rest. API хочет получить три вещи для аутентификации;Удаленный сервер возвратил ошибку: (401) Неавторизованный при запросе данных RestApi

Первый "Accept:. Приложение/VND ### 1.0 + JSON."

второй: "Тип содержимого: приложения/JSON"

третий: в кодировке Base64 «имя_пользователя : password "string

и я должен передать эти учетные данные для проверки и авторизации в пользовательском заголовке. Я знаю, что на этом сайте есть много потоков, но я не мог решить проблему из них.

Вот код блока:

public class McAfeeIPSManager 
{ 
    String URL = "https://serviceOfApi/sdkapi/session"; 

    public void getWebRequest() 
    { 
     System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
     String username = "user"; 
     String password = "password1"; 


     var request = HttpWebRequest.Create(URL) as HttpWebRequest; 
     request.Accept = "application/vnd.###.v2.0+json"; 
     request.Method = "GET"; 
     request.ContentType = "application/json"; 


     String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password)); 
     request.Headers.Add("Authorization","Basic "+encoded); 



     try 
     { 
      // Get response 
      using (var response = request.GetResponse() as HttpWebResponse) 
      { 
       // Get the response stream 
       using (var responseReader = new StreamReader(response.GetResponseStream())) 
       { 
        string responseBody = responseReader.ReadToEnd(); 

        // Console application output 
        System.Diagnostics.Debug.Write("Response Body ---> " + responseBody); 
        //Console.WriteLine(responseBody); 
       } 

      } 
     } 
     catch (WebException ex) 
     { 
      System.Diagnostics.Debug.Write("Error : " + ex.Message); 
      Console.WriteLine("Error: {0}", ex.Message); 
     } 

    } 
} 

Как получить данные из WebAPI в этих условиях Может кто-нибудь мне помочь?

ответ

0

У вас нет предустановок и учетных данных? У меня есть код, который может помочь вам:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://pwmaffr2:8443/remote/system.delete?names=" + DeviceName + ""); 
        request.Headers.Add("AUTHORIZATION", "Basic YTph"); 
        request.ContentType = "text/html"; 

        request.Credentials = new NetworkCredential(Username, Password); 
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 
        request.PreAuthenticate = true; 
        request.Method = "GET"; 
        HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
        ); 

        StreamReader stream = new StreamReader(response.GetResponseStream()); 
        string X = stream.ReadToEnd(); 
+0

параметр preAuthenticate не решить мои problem.I есть рассмотрел ваш код, сетевые учетные данные могут быть добавлены в мой код, но формат будет кодировать base64. – dodotu

+0

У вас есть учетные данные, как я? request.Credentials = новый NetworkCredential (имя пользователя, пароль); – Zwan

+0

да ı сделал, но, как я сказал, пароль пользователя должен быть закодирован base64 – dodotu

0

СММ в дополнение того, что я отправляю попробовать справиться с этим, он должен работать для вас надеюсь:

string credentials = String.Format("{0}:{1}", username, password); 
byte[] bytes = Encoding.ASCII.GetBytes(credentials); 
string base64 = Convert.ToBase64String(bytes); 
string authorization = String.Concat("basic ", base64); 
request.Headers.Add("Authorization", authorization); 
+0

нет никакой разницы между тем, что я сделал в коде. – dodotu

+0

Я не понимаю, что я использую API McAfee слишком – Zwan

+0

вы можете получить информацию о сеансе? Я не делал ничего другого, что я написал – dodotu

Смежные вопросы