繁体   English   中英

C#HttpClient Uri值

[英]C# HttpClient Uri value

我正在创建WindowsPhone 8.1应用程序,但无法让客户端访问数据库。 我创建了一个服务器端项目,可以使用Web api正常运行。 我能够运行调试器并添加“ / api / entityName”以返回该表中所有行的列表,或者如果我指定了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 Server数据库。 我尝试使用Azure中为数据库列出的URL,我当前的IP地址,几乎使用/排除端口号的每种组合等,但是似乎没有任何效果。 我没有任何错误,但是我也没有在用户界面中显示任何内容(输入的测试语句除外)。 尝试开始打印,但是在linq之前不会打印,这就是为什么我认为我的问题来自传递给int 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的回答和我收到的其他回答,我得以使这些条正确打印。 我在托管数据库的uri(azurewebsites.net url)而非本地数据库中使用了Midhun的代码。 我还将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项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM