のためのRESTfulなHTTPクライアントを構築コンテキストPCL
最近、私は、C#/。NETで動作Xamarinを使用して、モバイルプロジェクトに取り組んで始めました。私はアンドロイドアプリとJava開発の一般的な開発から来た。 thisというアプリケーションでhttpクライアントをビルドするときは、私はいつも同じスキームを使います。私はそれが必要である場合にのみ、上書きの概念が好きです。このJava RESTfulなhttpクライアントをC#/ .NET RESTfulなhttpクライアントに翻訳したいと思います。
await MakeGetRequest<List<Role>>(Constants.RolesEnpoint)
.OnSuccess((response) =>
{
//Response which is of type List<Role>
ShowList(response);
})
.OnError((exception) =>
{
ShowErrorMessage("Unkown error:" + exception.Message);
})
.OnInternatServerError(() =>
{
ShowErrorMessage("The server explode");
});
よく、主に私が直面してる問題は、私はそれらのラムダコールバックを実装する方法については本当によく分からないということです。私はこのようになりますAPIを持っているしたいと思います
。私がこれまでにやったことです:私はちょうど右方向に指摘されている具体的な答え、またはフルコード答えを、したくない
//<summary>
// Makes a get request and deserializes the result JSON as T class objects.
// Check https://forums.xamarin.com/discussion/22732/3-pcl-rest-functions-post-get-multipart
//</summary>
//<param name="endpoint">The endpoint name i.e. "/api/v1/feed"</param>
//<param name="auth">True if we want to seth the AUTH_TOKEN cookie. False otherwise.</param>
private async RequestTask<T> MakeGetRequest<T>(string endpoint, bool auth = true)
{
await new RequestTask<T>((rt) =>
{
try
{
ValidateAuthToken();
var request = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress, endpoint));
SetHeaders(request);
if (string.IsNullOrEmpty(authToken))
{
rt.OnAuthTokenError();
}
request.Headers["Cookie"] = authToken;
request.Method = "GET";
HttpWebResponse response = await request.GetResponseAsync();
if (!response.StatusCode.Equals(HttpStatusCode.OK))
{
rt.OnHttpError(response.StatusCode);
switch (response.StatusCode)
{
case HttpStatusCode.Forbidden:
rt.OnForbidden();
break;
case HttpStatusCode.InternalServerError:
rt.OnInternalServerError();
break;
case HttpStatusCode.RequestTimeout:
rt.OnRequestTimeout();
break;
case HttpStatusCode.GatewayTimeout:
rt.OnGatewayTimeout();
break;
case HttpStatusCode.NotFound:
rt.OnNotFound();
break;
case HttpStatusCode.Unauthorized:
rt.OnUnauthorized();
break;
}
}
var respStream = response.GetResponseStream();
respStream.Flush();
using (StreamReader sr = new StreamReader(respStream))
{
//Need to return this response
string strContent = sr.ReadToEnd();
respStream = null;
rt.OnSuccess(JsonConvert.DeserializeObject<T>(strContent, dateTimeConverter));
}
}
catch (Exception e)
{
rt.OnError(e);
}
});
}
。
さて、あなただけのアクションを期待して3つの機能を必要とする、これらを保存しますあなたの名前はアグスティンですか? –
Gusman
いいですね、小さなスニペットを提供できますか?私は同じ解決策を考えましたが、例えば、そのクラスでは 'Action'をローカルに保存して、[BuilderObject](http://www.javaworld.com/article/2074938/core-java)をどのように作成するのでしょうか。 /too-many-parameters-in-java-methodspart3-builder-pattern.html)。私の主な問題は、ラムダコールバック関数の呼び出し/宣言方法です。そしてはい、私の名前はAgustin:Pです。 –
4gus71n
また、あなたの関数は同じオブジェクトを返す必要があります。 – Gusman