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 项目。
我正在创建 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 项目。