标签: restsharp

处理RestSharp错误响应的正确策略是什么?

使用RestSharp的典型http调用如下所示:

var client = new RestClient("http://exampleapi.com");
var request = new RestRequest("someapi", Method.GET);
IRestResponse response = client.Execute(request);
Run Code Online (Sandbox Code Playgroud)

来自https://github.com/restsharp/RestSharp/wiki/Getting-Started上的文档:

如果存在网络传输错误(网络中断,DNS查找失败等),则RestResponse.Status将设置为ResponseStatus.Error,否则将为ResponseStatus.Completed.如果API返回404,则ResponseStatus仍将完成.如果您需要访问返回的HTTP状态代码,您可以在RestResponse.StatusCode中找到它.

此外,以下似乎是RestSharp响应的行为:

  • RestClient.Execute()永远不会抛出异常
  • 如果网络请求失败,即发生通常会导致异常的情况(例如网络超时,无法访问,名称无法解析),response.ErrorException则将填充一些Exception派生类型,response.ErrorMessage并将包含一些消息错误字符串和response.StatusCode将被设置为ResponseStatus.Error,Response.Status.Aborted,ResponseStatus.TimedOut,等.
  • 如果网络请求成功,但有一些HTTP错误(如404未找到,500服务器错误等),然后response.StatusCode将设置NotFound等,Response.ErrorExceptionResponse.Errornullresponse.StatusCode将被设置为"ResponseStatus.Completed`.

我可能错过了一些可能的回应,但我认为要点就在那里.

鉴于此,我应该如何确定响应的成功或失败?选项包括:

  • 如果ErrorException == null那么检查http响应
  • 如果response.ResponseStatus == ResponseStatus.Completed然后检查Response.StatusCode并根据结果获取响应数据并相应处理,如果不是您期望的
  • 如果http响应有些错误,那么取决于错误检查的类型 ErrorException
  • 更多...?

我不想过分反思这一点,但我假设有一个模式(缺乏更好的术语)来干净利落地处理这个问题.

c# error-handling exception http restsharp

14
推荐指数
1
解决办法
4256
查看次数

使用JWT身份验证的RestSharp不起作用

这是我"学习"如何操作的页面:https://stormpath.com/blog/token-authentication-asp-net-core

但对我来说这不起作用(也不适用于Fiddler)我的ApplicationUser模型有这个控制器:

[Authorize] //works when it's not set, doesn't work when it's set
[Route("api/[controller]")]
public class ApplicationUserController : Controller
{
    private IRepository<ApplicationUser> _applicationUserRepository;

    public ApplicationUserController(IRepository<ApplicationUser> applicationUserRepository)
    {
        _applicationUserRepository = applicationUserRepository;
    }

    [HttpGet("{id}")]
    public ApplicationUser Get(int id)
    {
        return _applicationUserRepository.Get(id);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且我的RestSharp包装器可以获取所有应用程序用户:

public Task<T> GetResponseContentAsync<T>(string resource, int id) where T : new()
{
    RestRequest request = new RestRequest($"{resource}/{{id}}", Method.GET);
    request.AddUrlSegment("id", id);
    if (!AuthenticationToken.IsNullOrEmpty(true))
    {
        request.AddHeader("Authorization", string.Format("Bearer {0}", AuthenticationToken));
        _client.Authenticator = new JwtAuthenticator(AuthenticationToken);
        _client.Authenticator.Authenticate(_client, request);
    }

    TaskCompletionSource<T> tcs …
Run Code Online (Sandbox Code Playgroud)

c# restsharp access-token asp.net-web-api2 asp.net-core

14
推荐指数
1
解决办法
3769
查看次数

调试器正在寻找executioncontext.cs,如何修复?

我正在调试此代码并获得一个奇怪的"源未找到"页面,当调试器落在Jtoken行上时,该页面正在寻找名为ExecutionContext.cs的类.

ExecutionContext.cs未找到.
您需要找到ExecutionContext.cs查看当前调用堆栈帧的源.

(有关其他信息,请参见下文)

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;

IRestResponse content = myApi.GetSomething();
JToken token = JObject.Parse(content.ToString()); 
MyClass myclass = token.ToObject<Myclass>();
Run Code Online (Sandbox Code Playgroud)

我也尝试用动态或var和相同的结果替换Jtoken.我用Google搜索了,除了MS文档之外什么都没有帮助修复.

有关如何执行此操作或至少抛出正常异常的任何建议我可以修复吗?

谢谢

找到'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'的源代码.(无校验和.)文件'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'不存在.

查看'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'的脚本文档...

查看'f:\ dd \ndp\clr\src\BCL\system\threading\executioncontext.cs'的项目.在项目中找不到该文件.查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include \'...

查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\cvt \'...

查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\msclr \'...

查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\sys \'...

查看目录'C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\thr \'...

查看目录'C:\ Program …

c# json restsharp asp.net-web-api visual-studio-2015

14
推荐指数
1
解决办法
8115
查看次数

RestSharp诉WebClient?

我正在构建一个Windows Phone 7 Silverlight应用程序.有没有理由使用RestSharp而不是WebClient?我在RestSharp网站上环顾四周,但它的好处并不是很明显.

rest silverlight windows-phone-7 restsharp

13
推荐指数
1
解决办法
3522
查看次数

如何将Cookie容器与RestSharp和ASP.NET会话一起使用?

我希望能够在控制器上调用身份验证操作,如果成功,则将经过身份验证的用户详细信息存储在会话中.

但是,我不确定如何将请求保留在会话中,因为我正在使用RestSharp作为分离的客户端.我需要以某种方式在成功授权后从服务器获取密钥,然后对于每个将来的呼叫,检查密钥与存储在会话中的密钥.

如何确保RestSharp中的RestClient发送所有未来请求并正确设置cookie,以便在服务调用内,可以正确检索会话变量?

我一直在用HttpFactory查看cookie容器,但似乎没有任何关于此的文档.

c# asp.net asp.net-mvc restsharp

13
推荐指数
2
解决办法
2万
查看次数

与RestSharp的持久HTTP连接

我正在使用RestSharp来使用REST Web服务,并将在短时间内进行大量调用.

API的文档强烈建议使用持久HTTP连接来执行此操作,但是我很难使用RestSharp.

我已经尝试在请求中添加"Connection:Keep-alive"标头,但是当我这样做时,请求失败并出现以下错误 - "可能无法使用此属性设置Keep-Alive和Close".

我可以不在RestSharp中使用此标头,或者我还需要做些什么才能启用它?

有人可以帮忙吗?谢谢.

rest http keep-alive http-headers restsharp

13
推荐指数
1
解决办法
8208
查看次数

RestSharp序列化为JSON,对象未按预期使用SerializeAs属性

我正在使用RestSharp(通过NuGet版本104.4)来调用Rest Web服务.我设计了一组对象(PO​​CO),它匹配API中公开的资源.但是,我的对象属性名称与发布数据时Rest服务所期望的属性名称不匹配,所以当我向Rest服务发出请求以使它们匹配匹配时,我想"转换"它们.我读到SerializeAs在我的POCO属性上添加属性(指定了Name)将使它们正确序列化,但它不会.

我的POCO

Imports RestSharp.Serializers

<Serializable(), SerializeAs(Name:="ApiMember")>
Public Class ApiMember
    <SerializeAs(Name:="id")>
    Public Property Id As Integer?

    <SerializeAs(Name:="email")>
    Public Property EmailAddress As String

    <SerializeAs(Name:="firstname")>
    Public Property Firstname As String

    <SerializeAs(Name:="lastname")>
    Public Property Lastname As String
End Class
Run Code Online (Sandbox Code Playgroud)

我对API的呼唤

Dim request As RestRequest = New RestRequest(Method.POST)
Dim member As ApiMember = new ApiMember()

member.EmailAddress = "me@example.com"

request.Resource = "members"
request.RequestFormat = DataFormat.Json
request.AddBody(member)

Dim client As RestClient = New RestClient()
client.BaseUrl = "http://url.com"
client.Authenticator = New HttpBasicAuthenticator("username", "password") …
Run Code Online (Sandbox Code Playgroud)

.net vb.net rest json restsharp

13
推荐指数
4
解决办法
2万
查看次数

使用RestSharp获取JSON响应

我是C#的新手,我正在尝试使用RestSharp从REST请求中获取JSON响应; 我想要执行的请求如下:"http://myurl.com/api/getCatalog?token=saga001".如果我在浏览器中执行它,它的效果很好.

我试过这个:

var client = new RestClient("http://myurl.com/api/");

var request = new RestRequest("getCatalog?token=saga001"); 

var queryResult = client.Execute(request);

Console.WriteLine(queryResult);
Run Code Online (Sandbox Code Playgroud)

我得到"RestSharp.RestReponse"而不是我正在跳跃的JSON结果.

谢谢你的帮助 !

c# rest json restsharp

13
推荐指数
2
解决办法
3万
查看次数

如何使用RestSharp捕获异常

我正在与RestSharp合作开展一个项目.随着时间的推移,我发现了RestResponse类可以抛出的几个异常,其中大部分是我必须处理的,所以我的应用程序不会崩溃.我如何知道所有可能的异常并单独处理它们.

c# exception restsharp

13
推荐指数
1
解决办法
2万
查看次数

HttpStatus和DownloadData

我正在尝试使用DownloadData方法使用RestSharp下载文件(图像)

var client = new RestClient(baseUrl);

var request = new RestRequest("GetImage", Method.GET);

var response = client.DownloadData(request);
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如果请求返回错误,我无法看到HttpStatus代码.

我可以发出请求并检查状态:

var client = new RestClient(baseUrl);

var request = new RestRequest("GetImage", Method.GET);

var response = client.Execute(request);

var status = response.StatusCode;
Run Code Online (Sandbox Code Playgroud)

但后来我无法从Content属性中获取图像.

我错过了一些明显的东西吗?

c# restsharp

12
推荐指数
1
解决办法
5657
查看次数