那行为也让我很反感。
查看GitHub中RestClientExtensions的源代码,getAsync
方法实现为:
public static async Task<T> GetAsync<T>(this IRestClient client, IRestRequest request, CancellationToken cancellationToken = default)
{
var response = await client.ExecuteGetAsync<T>(request, cancellationToken);
ThrowIfError(response);
return response.Data;
}
您希望throwiferror
会查看HTTP状态代码,但查看RestSharp文档中的错误处理,它会显示:
static void ThrowIfError(IRestResponse response)
{
var exception = response.ResponseStatus switch
{
ResponseStatus.Aborted => new WebException("Request aborted", response.ErrorException),
ResponseStatus.Error => response.ErrorException,
ResponseStatus.TimedOut => new TimeoutException("Request timed out", response.ErrorException),
ResponseStatus.None => null,
ResponseStatus.Completed => null,
_ => throw response.ErrorException ?? new ArgumentOutOfRangeException()
};
if (exception != null)
throw exception;
}
关于你的问题:
我应该如何使用这些异步方法来处理这样的错误响应呢?
你不能:(。
private Task<T> GetAsync<T>(RestRequest request)
{
return Task.Run(() =>
{
var response = client.Get<T>(request);
if (response.IsSuccessful)
return response.Data;
//handle the errors as you wish. In my case, the api I work with always
//returns a bad request with a message property when it occurs...
var errorData = JsonConvert.DeserializeObject<ApiMessage>(response.Content);
throw new Exception(errorData.Message);
});
}
public class ApiMessage
{
public string Message { get; set; }
}
public Task<MyModel> SomeRequest()
{
var request = new RestRequest()
{
Resource = "some-resource",
};
return GetAsync<MyModel>(request);
}
问题内容: 我有一个API调用,我需要对其进行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过适当的凭据,则需要返回401状态。如果他们尚未发送受支持的请求格式,则需要返回400状态。 因为它是一个API,所以我真正想做的就是设置响应状态并以一条简单的愚蠢消息退出,该消息说明请求失败的原因(可能使用)。刚好足以完成工作,但我还无法使其正常工作。我
在我使用的JavaSpring应用程序中,从一个叫做的第三方,我们在JSON中获得错误响应,其中包含200个响应代码。 e. g. 如何将转换为400整数表示形式。Apacheinte似乎没有提供任何这样做的接口。
我的服务使用WebApi。它有一个带有GET方法的控制器。当我从客户端调用它并返回未授权的状态代码时,我在HttpResponseMessage中没有得到未授权,而是没有找到。 这是我从客户端调用它的方式: < code >响应的内容: 我在 GetTest() 处放置了一个断点,它在那里停止,所以它到达了控制器方法。 为什么我在客户端中收到“未找到”,而不是“未经授权”?
我已经创建了服务器过滤器,它计算响应大小。它通过创建响应包装器来实现这一点,该包装器将与Apache Commons包装在一起。此外,包装器创建带有包装流的PrintWriter。因此,理论上,无论使用什么方法来创建实际输出,都应该通过CountingOutputStream。 问题是,虽然整个过程对于典型的servlet请求都有效,但对于静态内容却失败了。准确地说,过滤器接收请求,创建响应包装,
QueryList遵循将业务与错误分离的原则, HTTP请求传输过程中如果出现的错误,QueryList将会抛出异常。 QueryList的HTTP客户端基于GuzzleHttp,它提供了丰富的HTTP异常类型,用户可以自行设计根据不同的异常类型做不同的处理。 如果你觉得麻烦,并不想每次都去处理HTTP异常,选择直接忽略,让程序继续运行下去,做法可以参考下面方式: 对内置的get()进行封装: u
我试图在aws.lamda-service上的node.js中创建函数,并在函数控制台进行测试,效果良好,但当调用api时,它不能导出到外部,api网关错误“malformed Lambda proxy response”状态错误502 有什么想法吗