HttpClient.GetAsync,无效的URI异常

36 浏览
0 Comments

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()

0
0 Comments

在使用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的异常。

0