【发布时间】:2016-09-14 09:49:45
【问题描述】:
我在这段代码之前遇到过问题。
public static async Task<Response> PushTest() {
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add( "Access-Token" , key ); //PROBLEM WAS HERE FOR SOME REASON
//PROBLEM CODE
//client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue( "Access-Token" , key );
Uri url = new Uri(BaseUrl + "pushes");
Dictionary<string,string> data = new Dictionary<string, string>();
data.Add( "body" , "TestBody" );
data.Add( "title" , "TestTitle" );
data.Add( "type" , "note" );
data.Add( "email" , Email );
HttpContent jsonContent = new StringContent(JsonConvert.SerializeObject(data, new KeyValuePairConverter()), System.Text.Encoding.UTF8,"application/json");
HttpResponseMessage post = await client.PostAsync(url, jsonContent); // DEBUG POINT
// WORKS NOW
string responseString = await post.Content.ReadAsStringAsync();
// DOESNT RETURN NULL TO THE MAIN METHOD ANYMORE
return JsonConvert.DeserializeObject<Response>( responseString );
}
private static void Main( string[ ] args ) {
Task<Response> n = PushTest();
Response r = n.Result;
Console.WriteLine( "Done" );
} // DEBUG POINT
}
总结:
最初不会工作,因为它无法通过发布请求,即使使用更好的任务和异步代码。
我对 C# 中的异步或任务一无所知,只有 java。在将代码修复为建议的修复并专注于任务之后,实际问题出在授权标头上。谁知道为什么这对我来说是一个更好的答案。改用 Add() 解决了这个问题。会研究这个。
【问题讨论】:
-
看看
async void和async Task的区别 -
这根本没有帮助。我已尝试将其转换为异步任务,但仍未发布。
-
然后做更多的事情,真正看看差异。努力实现我给的提示
-
你能看一下代码并告诉我为什么它现在不起作用以及为什么它以前起作用吗?如果我知道我写的代码不是垃圾,我可以去看看这之间的所有区别。我已经为此倾倒了 10 个小时。
-
如果是停得太快,还没做完就结束的问题,肯定会在10秒内完成。如果这是问题所在,那为什么它不起作用。