C#HttpClient Uri值
我正在创建WindowsPhone 8.1应用程序,但在让客户端访问数据库时遇到问题。我创建了一个服务器端项目,使用WebAPI可以很好地工作。我可以运行调试器并添加“/api/entityName”以返回该表中所有行的列表,如果我指定了id值,则只返回一行。在客户端进行了大量测试之后,我想我已经找到了我的错误:uri值。有人能告诉我应该向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
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(栏);}