Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用restsharp调用具有双重身份验证的api_C#_Api_Authorization_Restsharp - Fatal编程技术网

C# 使用restsharp调用具有双重身份验证的api

C# 使用restsharp调用具有双重身份验证的api,c#,api,authorization,restsharp,C#,Api,Authorization,Restsharp,我对restsharp是全新的,对c有些陌生# 我正在尝试使用restsharp访问api 我可以使用powershell $ClientCredsPlainText = $ClientID + ":" + $ClientSecret $ClientCredsBase64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($ClientCredsPlainText))

我对restsharp是全新的,对c有些陌生# 我正在尝试使用restsharp访问api

我可以使用powershell

$ClientCredsPlainText   = $ClientID + ":" + $ClientSecret
$ClientCredsBase64      = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($ClientCredsPlainText))
 
$AuthHeader = @{"Content-Type"  = 'application/x-www-form-urlencoded'
                "accept"        = 'application/json'
                "authorization" = "Basic $ClientCredsBase64" }
$AuthAPI    = @{"endpoint"      = 'https://foo.bar.com/api/'
                "url"           = '/now/table/cmdb_ci_server?u_owner_group=' }
$AuthBody   = @{"grant_type"    = 'password'
                "username"      = $SessionUser
                "password"      = $SessionPassword }

$finalresult=@()
$mdsownergroup=@('foo','bar','foofoo','barbar')
foreach ($item in $mdsownergroup) {
    $cmdburi        = $AuthAPI.endpoint + $AuthAPI.url + $item
    $cmdbrequest    = Invoke-RestMethod -Method GET -Uri $cmdburi -Headers $AuthHeader -Body $AuthBody 
    $finalresult+=$cmdbrequest.result 
    }
$cmdbrequest.result 
我正在用c#和restsharp做同样的尝试,postman建议下面的方法应该有效

var client = new RestClient("https://foo.bar.com/api/");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("X-IBM-Client-Id", "xxxxxx");
request.AddHeader("Authorization", "[{\"key\":\"\",\"value\":\"xxxxxx",\"description\":\"\",\"type\":\"text\",\"enabled\":true}]");
request.AddHeader("Authorization", "Basic xxxx");
request.AddHeader("Cookie", "JSESSIONID=xxxxx glide_user_route=glide.xxxx glide_session_store=xxxx; BIGipServerpool_foo=209737994.35390.0000");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
通过这一点,我收到:

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream.

事实上,在与另一个开发人员一起查看之后,我发现我需要使用基本身份验证并删除用户名和密码。通过传递客户端id和密码以及用户名和密码,这一点变得过于复杂了。

事实上,在与另一个开发人员一起查看之后,我发现我需要使用基本身份验证并删除用户名和密码。通过传递客户端id和密码以及用户名和密码,这一点过于复杂了。

欢迎使用SO。您提到您正在“做同样的事情”,但第二段代码似乎并不反映第一段代码。请避免张贴“简化版”。小的可复制样品是好的,但它们必须包含我们能够帮助你们所需的一切。我想更清楚一些。我相信我也在做同样的事情。这是我正在使用的powershell代码和邮递员建议的c#。明白了。PowerShell版本正在添加具有凭据的密码授予。我在C版本中看不到这一点。我在PowerShell版本中也没有看到任何cookie。我发现了其他东西。我想你想做一篇文章,而不是一篇文章。看看答案。在下面谢谢,欢迎光临。您提到您正在“做同样的事情”,但第二段代码似乎并不反映第一段代码。请避免张贴“简化版”。小的可复制样品是好的,但它们必须包含我们能够帮助你们所需的一切。我想更清楚一些。我相信我也在做同样的事情。这是我正在使用的powershell代码和邮递员建议的c#。明白了。PowerShell版本正在添加具有凭据的密码授予。我在C版本中看不到这一点。我在PowerShell版本中也没有看到任何cookie。我发现了其他东西。我想你想做一篇文章,而不是一篇文章。看看答案。在下面非常感谢。