Restsharp GET 调用有效,但 POST 未授权?
Restsharp GET Call Works, but POST is Unauthorized?
我正在为 challonge.com 开发 RestSharp API 调用程序,但我 运行 遇到了授权问题。进行 GET 调用时,一切正常,我可以获得我需要的信息。然而,当尝试 POST 调用时,状态代码 returns 为未授权,尽管使用相同的 API 密钥。我试过将密钥包含在请求正文中并作为参数,但似乎都不起作用。
以下是我正在拨打的电话:
-获取:https://api.challonge.com/v1/documents/tournaments/index
-POST: https://api.challonge.com/v1/documents/tournaments/create
这是我的代码。
public class APICall
{
HttpUtility http = new HttpUtility();
RestClient client = new RestClient("https://api.challonge.com/v1/");
public string GetCall(string key)
{
client.AddDefaultHeader("Content-Type", "application/json");
RestRequest request = new RestRequest("tournaments", DataFormat.Json);
request.AddParameter("api_key", key);
IRestResponse response = client.Get(request);
return response.StatusCode.ToString();
}
public string PostCall(string tournName, string key)
{
client.AddDefaultHeader("Content-Type", "application/json");
RestRequest request = new RestRequest("tournaments", DataFormat.Json);
var obj = new Tournament(tournName,key);
//request.AddParameter("api_key", key);
request.AddJsonBody(obj);
IRestResponse response = client.Post(request);
return response.StatusCode.ToString();
}
}
身份验证
与 API 的所有交互都需要一个具有经过验证的电子邮件地址和 API 密钥的 Challonge 帐户。我们支持 HTTP 基本身份验证。用户名 = 您的 Challonge 用户名,密码 = 您的 API 密钥。许多客户端将这些请求格式化为:https://username:api-key@api.challonge.com/v1/... 或者,如果您愿意,您可以只传递您的 API键作为所有方法调用的参数api_key。
所以这应该在您的 PostCall 开始时起作用:
var userName = "your Challonge username";
var uNamePw = $"{userName}:{key}";
var encoding = Encoding.GetEncoding("ISO-8859-1");
var credentials = Convert.ToBase64String(encoding.GetBytes(uNamePw));
client.AddDefaultHeader("Authorization", $"Basic {credentials}");
或者,您应该能够将 ?api_key={your api key}
附加到 url
我正在为 challonge.com 开发 RestSharp API 调用程序,但我 运行 遇到了授权问题。进行 GET 调用时,一切正常,我可以获得我需要的信息。然而,当尝试 POST 调用时,状态代码 returns 为未授权,尽管使用相同的 API 密钥。我试过将密钥包含在请求正文中并作为参数,但似乎都不起作用。
以下是我正在拨打的电话:
-获取:https://api.challonge.com/v1/documents/tournaments/index
-POST: https://api.challonge.com/v1/documents/tournaments/create
这是我的代码。
public class APICall
{
HttpUtility http = new HttpUtility();
RestClient client = new RestClient("https://api.challonge.com/v1/");
public string GetCall(string key)
{
client.AddDefaultHeader("Content-Type", "application/json");
RestRequest request = new RestRequest("tournaments", DataFormat.Json);
request.AddParameter("api_key", key);
IRestResponse response = client.Get(request);
return response.StatusCode.ToString();
}
public string PostCall(string tournName, string key)
{
client.AddDefaultHeader("Content-Type", "application/json");
RestRequest request = new RestRequest("tournaments", DataFormat.Json);
var obj = new Tournament(tournName,key);
//request.AddParameter("api_key", key);
request.AddJsonBody(obj);
IRestResponse response = client.Post(request);
return response.StatusCode.ToString();
}
}
身份验证
与 API 的所有交互都需要一个具有经过验证的电子邮件地址和 API 密钥的 Challonge 帐户。我们支持 HTTP 基本身份验证。用户名 = 您的 Challonge 用户名,密码 = 您的 API 密钥。许多客户端将这些请求格式化为:https://username:api-key@api.challonge.com/v1/... 或者,如果您愿意,您可以只传递您的 API键作为所有方法调用的参数api_key。
所以这应该在您的 PostCall 开始时起作用:
var userName = "your Challonge username";
var uNamePw = $"{userName}:{key}";
var encoding = Encoding.GetEncoding("ISO-8859-1");
var credentials = Convert.ToBase64String(encoding.GetBytes(uNamePw));
client.AddDefaultHeader("Authorization", $"Basic {credentials}");
或者,您应该能够将 ?api_key={your api key}
附加到 url