Xamarin.android Xamarin PCL,向REST服务发出请求并返回模型
因此,按照建议,我希望使用RestSharp来处理RESTWeb服务。我正在开发iOS和Android应用程序,我很想制作PCL,它向服务发出请求并只返回解析结果(例如,用户对象数组) 所以我如何在我的PCL中获得RestSharp,试过的NuGet,组件不适用于PCL,严重的问题是只下载源文件并在项目中复制它们,我想保留一些依赖关系管理Xamarin.android Xamarin PCL,向REST服务发出请求并返回模型,xamarin.android,xamarin,portable-class-library,Xamarin.android,Xamarin,Portable Class Library,因此,按照建议,我希望使用RestSharp来处理RESTWeb服务。我正在开发iOS和Android应用程序,我很想制作PCL,它向服务发出请求并只返回解析结果(例如,用户对象数组) 所以我如何在我的PCL中获得RestSharp,试过的NuGet,组件不适用于PCL,严重的问题是只下载源文件并在项目中复制它们,我想保留一些依赖关系管理 最佳做法是什么?我是否从错误的角度看待此问题?RestSharp不支持PCLs。我建议签出,或者只使用HttpClient和Json.NET的组合。我使用依赖
最佳做法是什么?我是否从错误的角度看待此问题?RestSharp不支持PCLs。我建议签出,或者只使用HttpClient和Json.NET的组合。我使用依赖注入,以便支持非PCL Json解析器。我还计划尝试一下组件存储中的本机HttpClient包装器。通过使用非PCL代码,与Json.NET等相比,您将获得相当多的性能 文本库有序列化程序接口,Web有IRestClient
下面的修改对我来说很有用,如果你觉得合适,我会很高兴的。 尝试在PCL中使用modernhttpclient。在inAndroid项目中,请确保您拥有以下软件包
理想情况下,当您尝试将Microsoft.Bcl添加到针对monoandroid的Android项目中时,它会抛出错误,因此请尝试按上述顺序添加nuget引用 我开发了一个非常简单的REST客户端,可以轻松地执行Http请求。你可以在我的Github上查看。API非常简单:
await new Request<T>()
.SetHttpMethod(HttpMethod.[Post|Put|Get|Delete].Method) //Obligatory
.SetEndpoint("http://www.yourserver.com/profilepic/") //Obligatory
.SetJsonPayload(someJsonObject) //Optional if you're using Get or Delete, Obligatory if you're using Put or Post
.OnSuccess((serverResponse) => {
//Optional action triggered when you have a succesful 200 response from the server
//serverResponse is of type T
})
.OnNoInternetConnection(() =>
{
// Optional action triggered when you try to make a request without internet connetion
})
.OnRequestStarted(() =>
{
// Optional action triggered always as soon as we start making the request i.e. very useful when
// We want to start an UI related action such as showing a ProgressBar or a Spinner.
})
.OnRequestCompleted(() =>
{
// Optional action triggered always when a request finishes, no matter if it finished successufully or
// It failed. It's useful for when you need to finish some UI related action such as hiding a ProgressBar or
// a Spinner.
})
.OnError((exception) =>
{
// Optional action triggered always when something went wrong it can be caused by a server-side error, for
// example a internal server error or for something in the callbacks, for example a NullPointerException.
})
.OnHttpError((httpErrorStatus) =>
{
// Optional action triggered when something when sending a request, for example, the server returned a internal
// server error, a bad request error, an unauthorize error, etc. The httpErrorStatus variable is the error code.
})
.OnBadRequest(() =>
{
// Optional action triggered when the server returned a bad request error.
})
.OnUnauthorize(() =>
{
// Optional action triggered when the server returned an unauthorize error.
})
.OnInternalServerError(() =>
{
// Optional action triggered when the server returned an internal server error.
})
//AND THERE'S A LOT MORE OF CALLBACKS THAT YOU CAN HOOK OF, CHECK THE REQUEST CLASS TO MORE INFO.
.Start();
等待新请求()
.SetHttpMethod(HttpMethod.[Post | Put | Get | Delete].Method)//
.SetEndpoint(“http://www.yourserver.com/profilepic///强制性
.SetJsonPayload(someJsonObject)//如果使用Get或Delete,则为可选;如果使用Put或Post,则为强制性
.OnSuccess((服务器响应)=>{
//当您收到来自服务器的成功200响应时触发的可选操作
//serverResponse的类型为T
})
.OnNoInternetConnection(()=>
{
//尝试在没有internet连接的情况下发出请求时触发的可选操作
})
.OnRequestStarted(()=>
{
//可选操作总是在我们开始提出请求时触发,即在以下情况下非常有用
//我们希望启动与UI相关的操作,例如显示进度条或微调器。
})
.OnRequestCompleted(()=>
{
//无论请求是否成功完成,可选操作总是在请求完成时触发
//它失败了。当您需要完成一些与UI相关的操作时,例如隐藏进度条或
//纺纱机。
})
.OnError((例外)=>
{
//可选操作总是在出现错误时触发。例如,它可能是由服务器端错误引起的
//例如,内部服务器错误或回调中的某些内容,例如NullPointerException。
})
.OnHttpError((httpErrorStatus)=>
{
//当发送请求时,服务器返回内部请求时,会触发可选操作
//服务器错误、错误请求错误、未授权错误等。httpErrorStatus变量是错误代码。
})
.OnBadRequest(()=>
{
//服务器返回错误请求错误时触发的可选操作。
})
.OnUnauthorize(()=>
{
//服务器返回未授权错误时触发的可选操作。
})
.OnInternalServerError(()=>
{
//服务器返回内部服务器错误时触发的可选操作。
})
//还有更多的回调,您可以钩住它们,检查请求类以获取更多信息。
.Start();
这似乎是可行的解决方案/替代方案。因此我尝试了PortableRest的这种设置:一个Android项目和一个PCL项目。我将PortableRest与NuGet一起引用到PCL项目,将PCL项目引用到Android项目。但当我尝试构建它时,它说在Android项目中它找不到PortableRest,当我尝试初始化我的Clinet类时,它是从PortableRest中的RestClient继承的。如果我也将PortableRest引用到Anseois项目中,它说明了我在客户端构造函数中使用的TimeZoneInfo类的双重性。@ZdeněkTopič我建议发布另一个关于PortableRest问题的问题。你也可以在Xamarin跨平台论坛上发布,这听起来也很合理。将请求封装在每个平台上的某个容器中,并在PCL中处理结果。无法决定应该使用哪种建议的解决方案。