我试图找到一种方法,如何将curl命令转移到C#。
我需要从api获取令牌并将其保存到文件C:\ ... \ x.json \
然后,我想将令牌声明为变量,并将其用于另一个curl POST请求中以获取数据以与它们一起工作。
卷曲:
curl -X POST "https://example.com"
-H "accept: application/json"
-H "Content-Type: application/json"
-d {"username":"username","password":"password"}
Run Code Online (Sandbox Code Playgroud)
我目前的尝试:
static void Main(string[] args)
{
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://example.com"))
{
request.Headers.TryAddWithoutValidation("Accept", "application/json");
request.Content = new StringContent("{\"username\":\"username\",\"password\":\"password\"}", Encoding.UTF8, "application/json");
var response = await httpClient.SendAsync(request);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,但是都没有用。这是来自curl.olsh.me,但我也收到一些等待中的错误,我不知道该怎么办。(我是C#的新手):
“ await”运算符只能在异步方法中使用。考虑使用“异步”修饰符标记该方法,并将其返回类型更改为“任务”。
curl -v输出:
使用这个网站 https://curl.olsh.me/
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://example.com/"))
{
request.Headers.TryAddWithoutValidation("Accept", "application/json");
request.Content = new StringContent("{\"username\":\"username\",\"password\":\"password\"}", Encoding.UTF8, "application/json");
var response = await httpClient.SendAsync(request);
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,您需要将用户名和密码转换为字节,并将其作为 Base 64 字符串并将其传递给 header。当您使用await时,如果它是一个void方法,那么您应该在其签名中添加带有Task的async修饰符,或者如果该方法应该返回任何类型而不是使用async Task,如示例中所示。在这种情况下,您需要使用测试示例中所示的结果来获取结果。您可以在Microsoft文档中阅读有关此主题的更多信息。
\n\n这是代码:
\n\npublic async Task<HttpResponseMessage> CreateAuthorization(string url, string username, string password)\n{\n HttpResponseMessage response;\n\n using (var httpClient = new HttpClient())\n {\n using (var request = new HttpRequestMessage(new HttpMethod("POST"), url))\n {\n request.Headers.TryAddWithoutValidation("Accept", "application/json");\n var authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes($"{username}:{password}"));\n request.Headers.TryAddWithoutValidation("Authorization", $"Basic {authorization}");\n response = await httpClient.SendAsync(request);\n }\n }\n\n return response;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n这是测试它的示例:
\n\npublic void CreateAuthorizationTest()\n{\n var response = CreateAuthorization("https://example.com", "username", "password");\n var result = response.Result;\n var o = result.Content.ReadAsStringAsync();\n\n if (result.IsSuccessStatusCode)\n {\n //do some thing if success\n // you can do deserialization what ever\n Console.WriteLine(o);\n }\n else\n {\n //do some thing if error\n Console.WriteLine(o);\n }\n //etc.\n}\nRun Code Online (Sandbox Code Playgroud)\n\n链接:
\n\nC# 7 中提供了异步主方法。如果您使用的是早期版本,您可以像这样“手动”处理任务
var task = httpClient.SendAsync(request);
task.Wait();
var response = task.Result;
Console.WriteLine(response.Content.ReadAsStringAsync().Result);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |