C#。。API httpclient身份验证和带有用户名和密码的代理

C#。。API httpclient身份验证和带有用户名和密码的代理,c#,api,C#,Api,我是API的新手但我有个问题, 我想从Web API获取数据,但有两种身份验证 首先是代理 第二种是基于API的身份验证 以下是我的获取操作代码: HttpClientHandler handler = new HttpClientHandler(); handler.Credentials = new NetworkCredential("test", "testing"); HttpClient client = new HttpClien

我是API的新手但我有个问题, 我想从Web API获取数据,但有两种身份验证

  • 首先是代理
  • 第二种是基于API的身份验证
以下是我的获取操作代码:

        HttpClientHandler handler = new HttpClientHandler();
        handler.Credentials = new NetworkCredential("test", "testing");
        HttpClient client = new HttpClient(handler);
        client.BaseAddress = new Uri("http://test.abctesting.com/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.
            MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync("admin/apiv2/").Result;
        var tenders = response.Content.ReadAsAsync<tenders>().Result;
HttpClientHandler handler=new-HttpClientHandler();
handler.Credentials=新的网络凭据(“测试”、“测试”);
HttpClient=新的HttpClient(处理程序);
client.BaseAddress=新Uri(“http://test.abctesting.com/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的System.Net.Http.Headers)。
MediaTypeWithQualityHeaderValue(“应用程序/json”);
httpresponsemessageresponse=client.GetAsync(“admin/apiv2/”).Result;
var=response.Content.ReadAsAsync().Result;
这段代码对我来说很好,但只是传递了代理用户名和密码! 如何继续使用身份验证用户名和密码获取API数据?

这应该可以:

HttpClientHandler handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential("test", "testing");
HttpClient client = new HttpClient(handler);
client.BaseAddress = new Uri("http://test.abctesting.com/");
client.DefaultRequestHeaders.Accept.Clear();

client.DefaultRequestHeaders.Accept.Add(
    new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));

string user = "user", password = "password";

string userAndPasswordToken =
    Convert.ToBase64String(Encoding.UTF8.GetBytes(user + ":" + password));

client.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", 
    $"Basic {userAndPasswordToken}");

HttpResponseMessage response = client.GetAsync("admin/apiv2/").Result;
var tenders = response.Content.ReadAsAsync<tenders>().Result;
HttpClientHandler handler=new-HttpClientHandler();
handler.Credentials=新的网络凭据(“测试”、“测试”);
HttpClient=新的HttpClient(处理程序);
client.BaseAddress=新Uri(“http://test.abctesting.com/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(
新的System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(“应用程序/json”);
字符串user=“user”,password=“password”;
字符串userAndPasswordToken=
Convert.ToBase64String(Encoding.UTF8.GetBytes(user+“:”+password));
client.DefaultRequestHeaders.TryAddWithoutValidation(“授权”,
$“基本{userAndPasswordToken}”);
httpresponsemessageresponse=client.GetAsync(“admin/apiv2/”).Result;
var=response.Content.ReadAsAsync().Result;

既然您在评论中提到了“基本身份验证”,那么除了您所拥有的内容之外,添加以下几行可能会有所帮助

 var byteArray = Encoding.ASCII.GetBytes($"{yourUsername}:{yourPassword}");
 client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

虽然还有其他流行的身份验证模式,如
OAuth
Bearer
等。根据身份验证模式更改
AuthenticationHeaderValue
上的密钥,并适当设置值

您知道API使用的身份验证模式吗?基本身份验证我认为它有3个错误。。意外字符$。。无效的表达式项“”…)预期