私はRESTリクエストを行う必要があるポータブルクラスライブラリを開発していて、RestsharpやEasyHttpのようなものを探しています。残念ながら、これらは現在PCLでは機能しません。また、基本認証を使用してPOSTリクエストを実行する例を見るとよいでしょう。
何も出ていない場合、基本認証を使用してPOSTリクエストを実行する方法の例はありますか?
私はRESTリクエストを行う必要があるポータブルクラスライブラリを開発していて、RestsharpやEasyHttpのようなものを探しています。残念ながら、これらは現在PCLでは機能しません。また、基本認証を使用してPOSTリクエストを実行する例を見るとよいでしょう。
何も出ていない場合、基本認証を使用してPOSTリクエストを実行する方法の例はありますか?
4.5またはWindowsStoreアプリをターゲットにしている場合は、HttpClientをPCLとして使用できます。それ以外の場合は、 https: //github.com/Geodan/geoserver-csharp/tree/master/RestSharpでRestSharpのハックアンドスラッシュPCLポートを試すことができます
最近発表されたものがあり、現在GitHubで入手できます。それはポータブルレストと呼ばれています
https://github.com/advancedrei/PortableRest
PortableRestは、他のポータブルクラスライブラリにRESTAPIクライアントを実装するためのポータブルクラスライブラリです。JSON.NETを利用して、迅速でカスタマイズ可能なシリアル化を実現し、Microsoft.Bcl.Asyncライブラリを活用して、あらゆるプラットフォームで待機可能な実行を実現します。RestSharpとほぼドロップイン互換になるように設計されていますが、いくつかの変更を加えて再コンパイルする必要があります。
この初期リリースでは、単純なJSONリクエストのサポートが制限されています。今後のリリースでは、より多くのオプション(XMLおよびできればDataContractのサポートを含む)が利用可能になる予定です。
Windows Phone 7.5以降のみをサポートしていたため、このライブラリ(Microsoft.Bcl.Async)を使用してPLCに非同期サポートを追加し、このソリューションを使用することができました。
したがって、私のコードは次のようになりました。
public async Task<RequestResult> 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<WebResponse> 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<bool> 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を使用して