【发布时间】:2019-12-09 03:05:06
【问题描述】:
我使用 GetAsync() 编写了一个工作正常的函数,但现在我想使用 SendAsync() 来扩展它而不是 [用于 POST 和sofourth];但是我的 SendAsync() 版本没有按预期工作,它返回一个 422 不可处理的实体。 (没有 IDE atm;抱歉有小错别字)
初始化
var Client = new HttpClient{
BaseAddress = "https://example.com"
}
Client.DefaultRequestHeaders.UserAgent.ParseAdd("Project/1.0 (blah blah)");
...
工作 获取Async()
public async Task<string> GetResponse(string user, string pass){
var uri = $"/user/login.json?name={user}&password={pass}";
var req = await Client.GetAsync(uri);
return req.Content.Request.Content.ReasStringAsync();
}
不工作发送Async()
public async Task<string> GetResponse(string page, Dictionary<string, string> args){
//assume page = "/user/login.json" and args == {"username", "user"},{"password", "pass"}
try{
var req = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri(page),
Content = new FormUrlEncodedContent(args),
}
var response = await Client.SendAsync(req);
if(response.IsSuccessStatusCode){
return await response.Content.ReasStringAsync();
return null;
}
catch{ return null }
}
注意:与 422 一起,响应仍然包含 json,其中指出“无效的 Auth Token!”
什么是 GetAsync() 而不是 SendAsync()?
【问题讨论】:
-
您的 Send 在 GET 请求的 BODY 中包含内容。 GET 请求没有 BODY。
-
哦,那么 RequestUri 应该是带有 (get) 参数的整个 url 吗?在那种情况下应该是什么... RequestUri = new Uri(page + FormUrlEncodedContent(args), ?
标签: c# dotnet-httpclient sendasync