HttpClient.GetAsync,无效的URI异常
HttpClient.GetAsync,无效的URI异常
下面的代码无法正常工作。在GetAsync
中出现以下异常:
无效的URI:无法确定URI的格式。
然而,如果我注释掉apiClient.BaseAddress
并在apiClient.GetAsync
中指定完整的URI,那么它就能正常工作!
有人能解释一下原因吗?
开发环境:
VS2012,.NET 4.5,C#,ASP.NET WebForms
代码
private async Task WebAPICall() { using (var apiClient = new HttpClient()) { apiClient.BaseAddress = new Uri("http://localhost:9000/"); apiClient.DefaultRequestHeaders.Accept.Clear(); apiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); apiClient.Timeout = new TimeSpan(0, 0, 30); try { HttpResponseMessage apiResponseMsg = await apiClient.GetAsync(new Uri("api/products/" + txtProductID.Text.Trim())); string strResponse = await apiResponseMsg.Content.ReadAsStringAsync(); Response.Write(strResponse); } catch (Exception ex) { Response.Write(ex.Message); } } //using (var apiClient = new HttpClient()) } //private async Task WebAPICall()
在使用HttpClient的GetAsync方法时,遇到了Invalid URI exception的问题。根据StackOverflow上的帖子,找到了问题所在并解决了它。感谢提供URL的帮助。
问题的原因是URI字符串的格式不正确。在GetAsync方法中,使用了一个字符串拼接的方式来构建完整的URI。然而,在拼接字符串时,可能没有考虑到一些特殊字符或格式要求,导致了URI的格式不正确,从而引发了Invalid URI exception的异常。
为了解决这个问题,我们需要更改URI字符串的格式。根据具体情况,可以尝试以下几种方法:
1. 确保URI字符串的格式正确,包括协议、主机、路径等部分的正确拼写和格式化。
2. 对于可能包含特殊字符的部分,可以使用Uri.EscapeDataString方法进行转义,确保字符被正确处理。
3. 如果URI字符串包含变量或动态部分,可以考虑使用UriBuilder类来构建URI,它提供了更灵活和安全的方式来构建URI。
在这个具体的例子中,通过修改URI字符串的方式解决了问题。具体的代码如下所示:
HttpResponseMessage apiResponseMsg = await apiClient.GetAsync("api/products/" + txtProductID.Text.Trim());
通过修改txtProductID.Text.Trim()的内容,确保URI字符串的格式正确,从而解决了Invalid URI exception的异常。