我是否需要安装ASP.NET Web API客户端库(如this article所示)才能将数据发布到Web API服务器?如果是这样,可以我在Visual Studio 2008中从Windows CE项目中这样做了吗?
我想知道的原因是:
0)客户端是一个Windows CE项目,我正在使用Visual Studio 2008,我不知道ASP.NET Web API客户端库是否可用于该版本;我知道我在那个环境中没有NuGet包管理器。
1)我成功查询RESTful Web API方法中的数据,而无需使用以下代码安装ASP.NET Web API客户端库:
while (true)
{
deptList.departments.Clear();
string uri = String.Format("http://platypi:28642/api/Duckbills/{0}/{1}", lastIdFetched, RECORDS_TO_FETCH);
var webRequest = (HttpWebRequest) WebRequest.Create(uri);
webRequest.Method = "GET";
using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
{
if (webResponse.StatusCode == HttpStatusCode.OK)
{
var reader = new StreamReader(webResponse.GetResponseStream());
string jsonizedDuckbills = reader.ReadToEnd();
List<Duckbill> duckbills = JsonConvert.DeserializeObject<List<Duckbill>>(jsonizedDuckbills);
if (duckbills.Count <= 0) break;
foreach (Duckbill duckbill in duckbills)
{
duckbillList.duckbills.Add(duckbill);
lastIdFetched = duckbill.Id;
}
} // if ((webResponse.StatusCode == HttpStatusCode.OK)
} // using HttpWebResponse
int recordsAdded = LocalDBUtils.BulkInsertDuckbills(duckbillList.duckbills);
totalRecordsAdded += recordsAdded;
} // while (true);
但是,我坚持发帖,到目前为止我见过的最干净的例子就是上面link already shown。
我得到了关于如何发布here的问题的答案,但这并没有让我足够聪明到实际完成它。这可能是朝着正确方向迈出的一步,虽然我认为,根据我的客户端查询代码的外观,客户端发布代码将具有类似的“样式”(如前面引用的文章here,并且不同于同样先前引用了答案here)。
如果我已经在uri字符串中提供数据,就像我一样,这样:
string uri = String.Format("http://shannon2:28642/api/Departments/{0}/{1}", onAccountOfWally, moniker);
...为什么我还需要在postData中指定它?或者我可以将postData(如果这只是获取长度的必要步骤)设置为这些值......类似于:
postData = String.Format("{0}, {1}", onAccountOfWally, moniker);
答案 0 :(得分:2)
要与ASP.NET Web API交谈,您不一定需要客户端库,尽管它使生活更轻松。毕竟,HTTP服务的一个好处是平台覆盖范围。从字面上看,您可以使用任何为您提供HTTP功能的库。因此,使用WebRequest
,您可以执行此类操作。我在有效载荷中使用JSON。您也可以使用XML和application / www-form-urlencoded。只是你需要相应地格式化请求体。此外,对于复杂对象,与使用手动格式化JSON不同,最好使用JSON.NET。
var request = System.Net.WebRequest.Create("http://localhost:12345/api/values");
request.Method = "POST";
string postData = "{\"firstName\":\"Steven\"," + "\"lastName\":\"Waugh\"}";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/json";
request.ContentLength = byteArray.Length;
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(byteArray, 0, byteArray.Length);
}
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
using (var reader = new System.IO.StreamReader(responseStream))
{
string responseFromServer = reader.ReadToEnd();
Console.WriteLine(responseFromServer);
}
}
}
修改强>
如果要在URI中指定数据,则无需在请求正文中指定相同的数据。要让Web API从URI绑定参数,您需要相应地指定路径,以便为onAccountOfWally和moniker设置占位符。然后,您将需要使用类似字符串的简单类型作为要绑定的Web API的操作方法参数。默认情况下,简单类型从URI路径和查询字符串以及请求体中的复杂类型绑定。