C# HttpClient Uri 值

C# HttpClient Uri value

我正在创建 WindowsPhone 8.1 应用程序,但在让客户端访问数据库时遇到了问题。我创建了一个使用 web api 运行良好的服务器端项目。我能够 运行 调试器并将“/api/entityName” 添加到 return 中所有行的列表 table 或者如果我指定了一个 id 值则只添加一行.在客户端进行了大量测试后,我想我已经查明了我的错误:uri 值。有人能告诉我应该将什么值传递给 uri 构造函数吗?这是我在客户端中使用的方法:

public async void GetBars()
    {
        var uri = new Uri("http://localhost:20672/tables/bars"); //seems like this value is the problem
        var httpClient = new HttpClient();

        barsListBox.Items.Add("right before try starts");
        // Always catch network exceptions for async methods
        try
        {
            barsListBox.Items.Add("try started");
            var result = await httpClient.GetStringAsync(uri); //never gets past this line. goes straight to finally
            barsListBox.Items.Add("right before linq");
            var queryAllBars =
                from bar in result
                select bar;
            barsListBox.Items.Add("linq finished");
            foreach (var bar in queryAllBars)
            {
                barsListBox.Items.Add(bar);
            }
        }
        catch
        {
            // Details in ex.Message and ex.HResult.       
        }
        finally
        {
            barsListBox.Items.Add("finally executed");
            httpClient.Dispose();
        }


    }

该数据库是托管在 Azure 上的 SQL 服务器数据库。我已经尝试使用为 Azure 中的数据库列出的 URL、我当前的 IP 地址、using/excluding 端口号等的几乎所有组合,但似乎没有任何效果。我没有收到任何错误,但 UI 中也没有显示任何内容(我输入的测试语句除外)。 Try started 得到打印,但就在 linq 没有打印之前,这就是为什么我认为我的问题来自传递给 GetStringAsync 的 uri 值。感谢您的帮助。

你可以这样试试

                using (var client = new HttpClient())
                {

                    client.BaseAddress = new Uri("http://Ipaddress/mammo/");
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                    HttpResponseMessage response = await client.GetAsync("api/controllername");

                        if (response.IsSuccessStatusCode)
                        {   
                           IList<something> data = await response.Content.ReadAsAsync<IList<something>>();
                        }
               }

感谢@Midhun 的回答和我收到的其他回答,我能够正确打印条形图。我将上面 Midhun 的代码与我的托管数据库(azurewebsites.net url)而不是我的本地主机数据库的 uri 一起使用。我还将 IList 更改为 String 并编写了一个使用 IndexOf 和 Substring 挑选值的方法,如下所示:

start = bar.IndexOf("BarID", start) + 7;
int end = bar.IndexOf(",", start);
int id = Convert.ToInt32(bar.Substring(start, (end - start)));
Bars newBar = new Bars(id, name, street, city, state, phone, zip);
Bars.barsList.Add(newBar);

然后我在我的 Bars 模型中创建了一个静态列表来添加新创建的 Bars 项目。