我正在尝试将我的应用程序中的数据从注册页面发布到Web服务(使用requestb.in进行测试)但是当我尝试使用下面的代码时,它会将应用程序置于中断模式,然后当我使用断点时找到问题所在,只是表明“等待PostRequest(...)”导致问题。 我在Portable项目和android项目上都安装了System.Net.Http。
public async Task<JObject> PostAsync(string uri, string data)
{
var httpClient = new HttpClient();
var response = await httpClient.PostAsync(uri, new StringContent(data));
response.EnsureSuccessStatusCode();
string content = await response.Content.ReadAsStringAsync();
return await Task.Run(() => JObject.Parse(content));
}
然后单击按钮调用此方法的位置:
async void NextBtnClicked(object sender, EventArgs)
{
await PostAsync("https://requestb.in/MYURL", Username.Text);
}
Username.Text是XAML类中输入字段的字符串,这将重新创建我的问题
答案 0 :(得分:1)
以下是我将数据发布到API的通用方法。
正如上面@maccettura指出的那样,best practice to reuse HttpClient已经包含在下面的代码中。
static readonly Lazy<HttpClient> _clientHolder = new Lazy<HttpClient>(() => CreateHttpClient(TimeSpan.FromSeconds(60)));
static HttpClient Client => _clientHolder.Value;
protected static async Task<HttpResponseMessage> PostObjectToAPI<T>(string apiUrl, T data)
{
var stringPayload = await Task.Run(() => JsonConvert.SerializeObject(data)).ConfigureAwait(false);
var httpContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
try
{
return await Client.PostAsync(apiUrl, httpContent).ConfigureAwait(false);
}
catch (Exception e)
{
Debug.WriteLine(e.Message);
return null;
}
}
static HttpClient CreateHttpClient(TimeSpan timeout)
{
var client = new HttpClient();
client.Timeout = timeout;
client.DefaultRequestHeaders.AcceptEncoding.Add(new StringWithQualityHeaderValue("gzip"));
return client;
}
此代码段取自我BaseHttpClientService.cs
,我将其复制/粘贴到任何需要使用HttpClient
的应用中:
https://github.com/brminnick/XamList/blob/master/XamList/Services/BaseHttpClientService.cs
答案 1 :(得分:0)
使用UWP对您的应用程序进行故障排除,以便您可以查看它所引发的异常类型。还要尝试降级两个Nuget包。