使用api密钥身份验证的C#REST客户端Web API GET请求

时间:2019-02-02 02:52:34

标签: c# rest httpclient

我正在VS 2017中的Windows窗体应用程序项目中构建C#REST客户端。

我一直在遵循Microsoft文档here

中的一个很好的例子

我正在尝试实现HTTP GET方法来从服务器获取json数据。服务器使用api密钥进行身份验证,并且必须将其包含在GET请求路径或url中,如下所示:

"xyz.com/node?apiKey=12345"

我尝试如下添加此身份验证标头:

static async Task RunAsync()
        {
            string ApiKey = "12345";
            string baseAddr = "http://xyz123.com/public/node";
            client.BaseAddress = new Uri(baseAddr);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Add("?apiKey=", ApiKey);
            client.DefaultRequestHeaders.Accept.Add(
                new     
System.Net.Http.Headers.MediaTypeWithQualityHeaderValue
("application/json"));

            // get node serial numbers
            try
            {

尽管VS没有显示任何错误,但我觉得添加身份验证标头以包含api密钥存在错误。特别是在该行中:

client.DefaultRequestHeaders.Add("?apiKey=", ApiKey);

没有返回json对象。线程只是终止而没有任何输出。

1 个答案:

答案 0 :(得分:0)

将api密钥放置到DefaultRequestHeaders时出错。 api键应该是url的一部分。因此,而不是

client.DefaultRequestHeaders.Add("?apiKey=", ApiKey);

尝试

var builder = new UriBuilder("http://xyz123.com/public/node");
var query = HttpUtility.ParseQueryString(builder.Query);
query["apiKey"] = "12345";
builder.Query = query.ToString();
client.BaseAddress = new Uri(builder.ToString());

或使用此SO答案中使用的Handy extension methods