Работа с гамаком и приложением AgFx для Windows phone 7
Извините, если вопрос, который я задаю, создает бессмыслицу, поскольку я действительно новичок в этом.:(
У меня есть проект, который уже использует гамак для проверки подлинности oAuth (версия 1.0). А потом я увидел потрясающую инфраструктуру кэширования данных Шона Бёрка AgFx, и я действительно хочу использовать ее в своем проекте.
Но проблема у меня заключается в том, что с гамаком я могу легко сделать запрос, используя
var request = new RestRequest
{
Credentials = _credentials,
Path = "/fav.xml",
Method = WebMethod.Post
};
где я храню токен доступа, ключ потребителя и т. д. в объекте _credentials. И это делает свое волшебство для меня, поэтому мне не нужно преобразовывать их в длинную строку подписи oauth.
Но с AgFx, я понимаю, мне нужно использовать WebLoadRequest для запроса данных, который выглядит следующим образом
return new WebLoadRequest(loadContext, new Uri(myUri), "POST", "post-data");
где "post-data" должна быть строкой подписи oauth. Тогда в основном мне нужно выбросить то, что дает мне Гамак, и переписать код, чтобы получить подпись.
Мне просто интересно, есть ли лучший способ сделать это? Или я должен сказать, есть ли библиотека, которую я могу использовать, чтобы легко получить эту подпись?
Любая помощь приветствуется!!
Ура,
Xin
1 ответ
Я понял это.
Шон Берк, который создал эту структуру, указал мне верное направление.
По сути, я создал HammockLoadRequest, который наследуется от LoadRequest AgFx, и в переопределении Execute заменил HttpWebRequest на RestRequest Hammock, и все.
public class HammockLoadRequest : LoadRequest
{
public OAuthCredentials Credentials { get; set; }
public string AuthorityUrl { get; set; }
/// <summary>
/// Create a HammockLoadRequest
/// </summary>
public HammockLoadRequest(LoadContext loadContext, OAuthCredentials credentials, string authorityUrl)
: base(loadContext)
{
Credentials = credentials;
AuthorityUrl = authorityUrl;
}
/// <summary>
/// Performs the actual get for this request.
/// </summary>
/// <param name="result"></param>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
public override void Execute(Action<LoadRequestResult> result)
{
PriorityQueue.AddNetworkWorkItem(
() =>
{
var client = new RestClient
{
Authority = this.AuthorityUrl,
HasElevatedPermissions = true
};
var restRequest = new RestRequest
{
Credentials = this.Credentials,
Path = "/xxx.json",
};
restRequest.AddParameter("count", "5");
restRequest.AddParameter("include_rts", "1");
//if (sinceId != 0)
// request.AddParameter("since_id", sinceId.ToString());
RestCallback responseHandler = (request, response, userstate) =>
{
if (response.StatusCode != HttpStatusCode.OK)
{
Helpers.ShowMessage(String.Format("Error Getting Status: {0}", response.StatusCode));
return;
}
// convert string to stream
byte[] bytes = Encoding.UTF8.GetBytes(response.Content);
var stream = new MemoryStream(bytes);
stream.Close();
result(new LoadRequestResult(new MemoryStream(bytes)));
return;
};
client.BeginRequest(restRequest, responseHandler);
});
}
}