我正在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对象。线程只是终止而没有任何输出。
答案 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。