Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#HttpClient Uri值_C#_Linq_Http_Azure_Windows Phone 8.1 - Fatal编程技术网

C#HttpClient Uri值

C#HttpClient Uri值,c#,linq,http,azure,windows-phone-8.1,C#,Linq,Http,Azure,Windows Phone 8.1,我正在创建WindowsPhone 8.1应用程序,但在让客户端访问数据库时遇到问题。我创建了一个服务器端项目,使用WebAPI可以很好地工作。我可以运行调试器并添加“/api/entityName”以返回该表中所有行的列表,如果我指定了id值,则只返回一行。在客户端进行了大量测试之后,我想我已经找到了我的错误:uri值。有人能告诉我应该向uri构造函数传递什么值吗?以下是我在客户端使用的方法: public async void GetBars() { var uri

我正在创建WindowsPhone 8.1应用程序,但在让客户端访问数据库时遇到问题。我创建了一个服务器端项目,使用WebAPI可以很好地工作。我可以运行调试器并添加“/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地址、几乎所有使用/不包括端口号的组合,等等,但似乎没有任何效果。我没有得到任何错误,但我也没有在UI中显示任何内容(除了我输入的测试语句)。Try start会被打印出来,但就在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>>();
                        }
               }
使用(var-client=new-HttpClient())
{
client.BaseAddress=新Uri(“http://Ipaddress/mammo/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
HttpResponseMessage response=wait client.GetAsync(“api/controllername”);
if(响应。IsSuccessStatusCode)
{   
IList data=await response.Content.ReadAsAsync();
}
}

多亏了@Midhun的答案和我收到的其他答案,我才能够正确打印出这些条。我将上面的Midhun代码与托管数据库(azurewebsites.net url)的uri一起使用,而不是使用本地主机数据库。我还将IList更改为字符串,并编写了一个使用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项添加到其中。

结果是一个
HttpResponseMessage
,您不能将LINQ用于此类对象。尝试检查
response.Content.ReadAsStringAsync()的值感谢您的回复。我将我的服务项目发布到Azure,并将uri值替换为azurewebsites.net url,现在我至少能够循环使用我的整个方法(所有测试注释都被命中)。但是,我仍然没有得到任何要打印的值。使用上面提供的代码,我添加了以下foreach循环,以将数据打印到我的UI,但它从未进入循环。是否有其他方法可以将值打印到UI上?Thank.foreach(数据中的变量栏){barsListBox.Items.Add(“foreach输入”);barsListBox.Items.Add(栏);}