5

私はRESTリクエストを行う必要があるポータブルクラスライブラリを開発していて、RestsharpやEasyHttpのようなものを探しています。残念ながら、これらは現在PCLでは機能しません。また、基本認証を使用してPOSTリクエストを実行する例を見るとよいでしょう。

何も出ていない場合、基本認証を使用してPOSTリクエストを実行する方法の例はありますか?

4

4 に答える 4

5

4.5またはWindowsStoreアプリをターゲットにしている場合は、HttpClientをPCLとして使用できます。それ以外の場合は、 https: //github.com/Geodan/geoserver-csharp/tree/master/RestSharpでRestSharpのハックアンドスラッシュPCLポートを試すことができます

于 2012-11-26T09:27:47.873 に答える
2

最近発表されたものがあり、現在GitHubで入手できます。それはポータブルレストと呼ばれています

https://github.com/advancedrei/PortableRest

PortableRestは、他のポータブルクラスライブラリにRESTAPIクライアントを実装するためのポータブルクラスライブラリです。JSON.NETを利用して、迅速でカスタマイズ可能なシリアル化を実現し、Microsoft.Bcl.Asyncライブラリを活用して、あらゆるプラットフォームで待機可能な実行を実現します。RestSharpとほぼドロップイン互換になるように設計されていますが、いくつかの変更を加えて再コンパイルする必要があります。

この初期リリースでは、単純なJSONリクエストのサポートが制限されています。今後のリリースでは、より多くのオプション(XMLおよびできればDataContractのサポートを含む)が利用可能になる予定です。

于 2013-02-11T10:46:48.463 に答える
1

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);
        }

それがあなたにとって十分なコードではなかった場合は、ここでプロジェクトの残りの部分をチェックしてください。

于 2012-12-04T13:22:51.740 に答える
0

ポータブルRestSharpが次の場所で動作しています。

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

うまく機能しているようです...Json.netを使用して

于 2013-02-15T16:49:20.843 に答える