2016-05-04 14 views
-1

-u 'トークン'パラメータをカールから後続のウェブ呼び出しに渡すための解決策を見つけるのが難しいです。私はHttpClient、WebClient、Flurlを試しましたが、ポストログイン要求をトークンで正しくフォーマットする方法を解読することはできません。誰かがカールの-uに相当するいくつかのC#の例を私に指摘できますか?C#でcurl -u相当?

このバラクーダロードバランサからAPI DOC

ログイン要求

$ curl -X POST \ -H "Content-Type:application/json" \ -d '{"username": "admin", "password": "admin"}' \ http://10.11.19.104:8000/restapi/v2/login 

Response: 
{"token":"eyJldsI6IjE0NjIzODQ0MTgiLCJwYXNzd29yZCI6ImUzZDFhY2IwNzlkZmQxMDZmMmRhODEwZGRm 
MzFiNGI3IiwidXNlciI6InNlYW4ifQ=="} 

ログアウト要求

$ curl -u 'J3sidXNlcm5hbWUiOiJ5Jw=\n:' \ -X DELETE \ http://10.11.19.104:8000/restapi/v2/logout 

Response: { "msg": "Success" } 

はここでトークンを使用する私の試みです:

using System; 
using System.Net; 
using System.IO; 
using System.Text; 
using System.Web.Helpers; 
using Newtonsoft.Json; 
using NLog; 

namespace Barracuda 
{ 
    class Program 
    { 

     private static Logger logger = LogManager.GetCurrentClassLogger(); 
     public static String BaseUrl = "https://load.balancer.ip"; 
     public static String RestApi = "restapi/v2/"; 
     public static String LoginEndpoint = RestApi + "login"; 
     public static String LogoutEndpoint = RestApi + "logout"; 
     public static String VirtualUserGroups = RestApi + "virtual_service_groups"; 

     public class LoginCreds 
     { 
      public string username { get; set; } 
      public string password { get; set; } 
     } 

     public class LogoutMessage 
     { 
      public string msg { get; set; } 
     } 

     public class AuthToken 
     { 
      public string token { get; set; } 
     } 

     static void Main(string[] args) 
     { 
      //login 
      ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true; 
      var request = (HttpWebRequest) WebRequest.Create(BaseUrl + "/" + LoginEndpoint); 
      request.ContentType = "application/json"; 
      request.Method = "POST"; 
      using (var streamWriter = new StreamWriter(request.GetRequestStream())) 
      { 
       var creds = new LoginCreds {username = "myUsername", password = "myPassword"}; 
       string json = JsonConvert.SerializeObject(creds); 
       streamWriter.Write(json); 
      } 
      var response = (HttpWebResponse) request.GetResponse(); 
      AuthToken myToken; 
      using (var streamReader = new StreamReader(response.GetResponseStream())) 
      { 
       myToken = JsonConvert.DeserializeObject<AuthToken>(streamReader.ReadToEnd()); 
       logger.Log(LogLevel.Debug, myToken.token); 
      } 
      //logout 
      request = (HttpWebRequest) WebRequest.Create(BaseUrl + "/" + LogoutEndpoint); 
      request.ContentType = "application/json"; 
      request.Method = "DELETE"; 
      request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(myToken.token)); 
      response = (HttpWebResponse) request.GetResponse(); 
      using (var streamReader = new StreamReader(response.GetResponseStream())) 
      { 
       var logoutMessage = JsonConvert.DeserializeObject<LogoutMessage>(streamReader.ReadToEnd()); 
       logger.Log(LogLevel.Debug, logoutMessage.msg); 
      } 
     } 
    } 
} 
+0

これは一般的な認証方式ですか?私たちが知らないランダムなWebサービスとどのようにやりとりする必要があるのか​​、どのようにして知っていますか? – nvoigt

+0

詳細を追加しました。おそらくこれを行う簡単な方法があります。 – Sean

答えて

0

FML - タイプミス。基本の後のヘッダーにスペースが必要です。