必须/可以安装MS ASP.NET Web API客户端库才能将数据发布到我的Web API服务器吗?

时间:2013-12-18 23:15:04

标签: rest visual-studio-2008 post asp.net-web-api windows-ce

我是否需要安装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);

1 个答案:

答案 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路径和查询字符串以及请求体中的复杂类型绑定。