c#如何向REST Api发送身份验证请求

时间:2014-03-01 09:05:08

标签: c# api rest cookies curl

我正在尝试创建一个需要从API获取Json的(C#.net 4.5 winforms)应用程序。 我一直在尝试和谷歌搜索2天,没有运气!

注意:我不想使用Async! 注意:它不必是WebClient。

所有我必须继续的是这个记录的cURL请求:

curl -k -d "username=<USERNAME>@<AUTHTYPE>&password=<PASS>"  https://<URL>:<PORT>/api/json/access/ticket 
{ "data": { 
  "CSRFPreventionToken":"4EEC61E2:lwk7od06fa1+DcPUwBTXCcndyAY",  
  "ticket":"User:4EEC61E2::rsKoApxDTLYPn6H3NNT6iP2mv...", 
  "username":"<USERNAME>"}
}

我正在尝试使用WebClient来获取Json响应,但我一直得到:

Exception: "The remote server returned an error: (401) Unauthorized"

这是我的初始代码:

string result = "";
            var conn = "https://" + server.Hostname + ":" + server.Port + "/api2/json";
            var query = conn + "/access/ticket";
            var json = "";
            try
            {
                // Accept Self-Signed SSL Certificate
                ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
                // Get Json
                using (WebClient client = new WebClient())
                {
                    json = client.DownloadString(query);
                    result = json;
                }

            }
            catch (Exception e)
            {
                var BrPoint = e.ToString();
            }

            return result;

现在我需要发送带有该请求的身份验证(就像在curl中一样)但是如何?

当我有票时,我需要制作一张包含票据的cookie来发送下一个请求。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

它看起来像是因为你使用DownloadString()方法调用而不是使用UploadString()方法调用的POST请求来执行Get请求。

尝试将其更改为UploadString()并将以下内容作为数据参数传递:

username=<USERNAME>@<AUTHTYPE>&password=<PASS>