RestSharp没有在Xamarin.Android中给出响应,但在c#中命令行给出响应

时间:2017-03-16 09:20:16

标签: c# xamarin.android

Restsharp没有在Xamarin.Android中给出响应,但在c#CommandLine控制台应用程序中工作正常。

var client = new RestClient("https://shotlo.com/api");
var request = new RestRequest("getProfile", Method.POST);
request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddParameter("token", "00");
request.AddParameter("userId", "00");
IRestResponse response = client.Execute(request);
var content = response.Content;

1 个答案:

答案 0 :(得分:0)

如果您使用的是monoandroid10,那么RestSharp的版本应该可以使用105.2.2吗?

PCL或实际的Xamarin.Android库中的代码是什么?如果它不在PCL中,您是否正在开发仅限Android的应用程序?它会永远只是Android吗?如果不是,我建议将这样的代码放入PCL中,以便您可以从Android或iOS实现中重复使用它(有点使用Xamarin?)。

我还质疑是什么本质上是一个包装器。我喜欢RestSharp并自己使用它,但在Xamarin项目中我只使用System.Net.WebRequest(来自PCL内部)。如果你能让RestSharp工作那么好,那就去吧,否则就回到WebRequest。

首先创建请求:

var request = WebRequest.CreateHttp(url);
request.Method = method;
request.ContentType = contentType;

await AddBodyToRequest(data, request);
// add your headers here

添加正文(未经编辑):

        protected static async Task AddBodyToRequest(byte[] data, WebRequest request)
    {
        Logger.Debug("AddBodyToRequest: {0}", request.ContentType);
        var uri = request.RequestUri.AbsoluteUri;
        try
        {
            using (Stream stream = await Task<Stream>.Factory.FromAsync(request.BeginGetRequestStream, request.EndGetRequestStream, null))
            {
                stream.Write(data, 0, data.Length);
            }
        }
        catch (Exception ex)
        {
            Logger.Info(string.Format("[{0}] {1}. AddBodyToRequest [{2}]"
                , ex.GetType().Name, ex.Message, uri));
        }
    }

然后使用以下内容发送:

    using (var response = await request.GetResponseAsync(TimeSpan.FromSeconds(timeout)))
{
    try
    {
        return new ServiceCallResult<TR>(response);

你可以只返回响应,我个人更愿意包装响应(ServiceCallResult是客户包装器)......

在尝试之前我也检查'我可以发送'...基本上检查设备是否仍然有连接,没有必要,但鉴于你在设备上它通常是一个很好的理想(恕我直言)。

祝你好运!