web-dev-qa-db-fra.com

Appeler une api de repos avec un nom d’utilisateur et un mot de passe - comment

Je suis nouveau pour me reposer api et les appeler via .NET

J'ai une api: https://sub.domain.com/api/operations?param=value&param2=value

Les notes pour l'API indiquent que pour autoriser, je dois utiliser l'authentification d'accès de base - comment puis-je le faire?

J'ai actuellement ce code:

        WebRequest req = WebRequest.Create(@"https://sub.domain.com/api/operations?param=value&param2=value");
        req.Method = "GET";
        //req.Credentials = new NetworkCredential("username", "password");
        HttpWebResponse resp = req.GetResponse() as HttpWebResponse;

Cependant, je reçois une erreur non autorisée 401.

Qu'est-ce qui me manque, comment puis-je former des appels api en utilisant l'authentification d'accès de base?

34
andrewb

Si l'API dit d'utiliser l'authentification HTTP Basic, vous devez ajouter un en-tête d'autorisation à votre requête. Je modifierais votre code pour ressembler à ceci:

    WebRequest req = WebRequest.Create(@"https://sub.domain.com/api/operations?param=value&param2=value");
    req.Method = "GET";
    req.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("username:password"));
    //req.Credentials = new NetworkCredential("username", "password");
    HttpWebResponse resp = req.GetResponse() as HttpWebResponse;

Remplacement "username" et "password" avec les valeurs correctes, bien sûr.

52
Adrian

Vous pouvez également utiliser la bibliothèque RestSharp par exemple

var userName = "myuser";
var password = "mypassword";
var Host = "170.170.170.170:333";
var client = new RestClient("https://" + Host + "/method1");            
client.Authenticator = new HttpBasicAuthenticator(userName, password);            
var request = new RestRequest(Method.POST); 
request.AddHeader("Accept", "application/json");
request.AddHeader("Cache-Control", "no-cache");
request.AddHeader("Content-Type", "application/json");            
request.AddParameter("application/json","{}",ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
1
orellabac