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;
答案 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是客户包装器)......
在尝试之前我也检查'我可以发送'...基本上检查设备是否仍然有连接,没有必要,但鉴于你在设备上它通常是一个很好的理想(恕我直言)。
祝你好运!