是否有可以与Portable Class Libraries一起使用的REST库?

我正在开发一个需要发出REST请求的可移植类库,我正在寻找像Restsharp或EasyHttp这样的东西。 不幸的是,这些目前都不适用于PCL。 如果看到使用基本身份validation执行发布请求的示例,也会很高兴。

如果什么都没有,有没有人有一个例子,说明如何使用基本身份validation进行发布请求?

如果您定位4.5或Windowsapp store应用程序,您可以使用HttpClient作为PCL。 否则,您可以在https://github.com/Geodan/geoserver-csharp/tree/master/RestSharp上尝试破解和删除RestSharp的PCL端口

有一个刚刚宣布,目前可在GitHub上获得。 它被称为便携式rest

https://github.com/advancedrei/PortableRest

PortableRest是一个可移植类库,用于在其他可移植类库中实现REST API客户端。 它利用JSON.NET进行快速,可自定义的序列化,以及Microsoft.Bcl.Async库,以便在任何平台上等待执行。 虽然您需要进行一些更改并重新编译,但它的设计与RestSharp基本上是兼容的。

此初始版本对简单JSON请求的支持有限。 更多选项(包括XML和希望DataContract支持)将在以后的版本中提供。

由于我只支持Windows Phone 7.5及更高版本,因此我可以使用此库( Microsoft.Bcl.Async )将async suppport添加到我的plc,然后使用此解决方案 。

所以我的代码最终看起来像这样:

public async Task RunRequestAsync(string requestUrl, string requestMethod, object body = null) { HttpWebRequest req = WebRequest.Create(requestUrl) as HttpWebRequest; req.ContentType = "application/json"; req.Credentials = new System.Net.NetworkCredential(User, Password); string auth = Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", User, Password))); var authHeader = string.Format("Basic {0}", auth); req.Headers["Authorization"] = authHeader; req.Method = requestMethod; //GET POST PUT DELETE req.Accept = "application/json, application/xml, text/json, text/x-json, text/javascript, text/xml"; if (body != null) { var json = JsonConvert.SerializeObject(body, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore }); byte[] formData = UTF8Encoding.UTF8.GetBytes(json); var requestStream = Task.Factory.FromAsync( req.BeginGetRequestStream, asyncResult => req.EndGetRequestStream(asyncResult), (object)null); var dataStream = await requestStream.ContinueWith(t => t.Result.WriteAsync(formData, 0, formData.Length)); Task.WaitAll(dataStream); } Task task = Task.Factory.FromAsync( req.BeginGetResponse, asyncResult => req.EndGetResponse(asyncResult), (object)null); return await task.ContinueWith(t => { var httpWebResponse = t.Result as HttpWebResponse; return new RequestResult { Content = ReadStreamFromResponse(httpWebResponse), HttpStatusCode = httpWebResponse.StatusCode }; }); } private static string ReadStreamFromResponse(WebResponse response) { using (Stream responseStream = response.GetResponseStream()) using (StreamReader sr = new StreamReader(responseStream)) { //Need to return this response string strContent = sr.ReadToEnd(); return strContent; } } 

然后我会用以下代码调用代码:

 public async Task SampleRequest() { var res = RunRequestAsync("https//whatever.com/update/1", "PUT"); return await res.ContinueWith(x => x.Result.HttpStatusCode == HttpStatusCode.OK); } 

如果那个代码不够,请随时查看项目的其余部分

您有一个便携式RestSharp工作于:

https://github.com/Geodan/geoserver-csharp/tree/master/RestSharp

它似乎运行良好……它使用Json.net