Базовая авторизация клиента REST для REST APIC#

Место общения программистов C#
Ответить
Anonymous
 Базовая авторизация клиента REST для REST API

Сообщение Anonymous »

У меня вопрос. У меня есть значение базовой авторизации с кодировкой Base64Encoded, которое выглядит примерно так: «aHZjYnN4NXJ4bXV6OmplWHN1Wl....». Мне просто интересно, где я могу поместить это значение в код? Это необходимо, чтобы я мог получить токен доступа к носителю. У меня это работает в Postman, но не в этом коде. Этот код позволяет получать строки JSON из других API, которым не требуется дополнительная авторизация. Но когда я пробую это на другом API, который требует строку базовой авторизации, я получаю эту ошибку: {"errorMessage":["Удаленный сервер возвратил ошибку: (405) Метод не разрешен."],"errors":{}}. Не удалось найти много документации по этому вопросу, любая помощь будет очень признательна.

Вот код в классе формы:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AuthtRestClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

#region UI Event Handlers
private void CmdGO_Click(object sender, EventArgs e)
{
RestClient rClient = new RestClient();
rClient.Endpoint = txtRequestURI.Text;

rClient.UserName = txtUserName.Text;
rClient.UserPassword = txtPassword.Text;

DebugOutput("REst Client Created");

string strResponse = string.Empty;

strResponse = rClient.MakeRequest();

DebugOutput(strResponse);
}

#endregion

private void DebugOutput (string strDebugText)
{
try
{
System.Diagnostics.Debug.Write(strDebugText + Environment.NewLine);
txtResponse.Text = txtResponse.Text + strDebugText + Environment.NewLine;
txtResponse.SelectionStart = txtResponse.TextLength;
txtResponse.ScrollToCaret();
}
catch (Exception ex)
{
System.Diagnostics.Debug.Write(ex.Message, ToString() + Environment.NewLine);
}
}
}
}
Вот код класса RestClient:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace AuthtRestClient
{
public enum HttpVerb
{
GET,
POST,
PUT,
DELETE
}

public enum AuthenticationType
{
Basic,
NTLM
}

public enum AuthenticationTechnique
{
RollYourOwn,
NetworkCredential
}

class RestClient
{
public string Endpoint { get; set;  }
public string EndPoint { get; }
public HttpVerb HttpMethod { get; set;  }
public AuthenticationType AuthType { get; set; }
public AuthenticationTechnique AuthTech { get; set; }
public string UserName { get; set; }
public string UserPassword { get; set; }

public RestClient()
{
EndPoint = string.Empty;
HttpMethod = HttpVerb.GET;
}

public string MakeRequest()
{
string strResponseValue = string.Empty;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Endpoint);

request.Method = HttpMethod.ToString();

string authHeader = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(UserName + ":" + UserPassword));
request.Headers.Add("Authorization", "Basic " + authHeader);

HttpWebResponse response = null;

try
{
response = (HttpWebResponse)request.GetResponse();

// Process the response stream...  (could be JSON, XML, HTML, etc...)

using (Stream responseStream = response.GetResponseStream())
{
if (responseStream != null)
{
using (StreamReader reader = new StreamReader(responseStream))
{
strResponseValue = reader.ReadToEnd();
}// End of StreamReader
}
}// End of using ResponseStream

}
catch(Exception ex)
{
strResponseValue = "{\"errorMessage\":[\"" + ex.Message.ToString() + "\"],\"errors\":{}}";
}
finally
{
if (response != null)
{
((IDisposable)response).Dispose();
}
}

return strResponseValue;
}
}
}
Я пытался передать его несколькими разными способами, один из которых выглядит так, но не смог заставить его работать:

Код: Выделить всё

string authHeader = System.Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("U4OXU5aHZjYnN4NXJ4bXV6ORIWUp==" +
":" +UserName + ":" + UserPassword));
request.Headers.Add("Authorization", "Basic " + authHeader);
Будем очень благодарны за любую помощь. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/495 ... a-rest-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»