RestSharp GET请求返回BadRequest但无法获取响应体问题咨询
在.NET 6 + RestSharp 108.0.2中获取BadRequest的响应体
完全可以获取到服务器返回的JSON响应体,有两种常用方案:
方案1:从捕获的异常中提取响应体
RestSharp在抛出HttpRequestException时,其内部实际封装了RestResponseException,可以通过InnerException获取到包含完整响应信息的RestResponse对象,进而读取响应体:
try { var client = new RestClient("https://your-api-url.com"); var request = new RestRequest("/target-endpoint", Method.Get); request.AddParameter("invalid-param", "wrong-value"); // 错误参数 var response = await client.ExecuteAsync<YourResponseModel>(request); } catch (HttpRequestException ex) { if (ex.InnerException is RestResponseException restException) { // 获取服务器返回的JSON响应体 string errorResponseJson = restException.Response.Content; // 可选:将JSON反序列化为错误模型 var errorDetails = System.Text.Json.JsonSerializer.Deserialize<YourErrorModel>(errorResponseJson); // 处理错误信息 Console.WriteLine($"错误原因:{errorDetails?.Message}"); } }
方案2:禁用自动抛出异常,直接处理响应
通过配置RestClientOptions的ThrowOnAnyError为false,让RestSharp在非2xx状态码时不抛出异常,直接返回RestResponse,你可以自行检查状态码并读取响应体:
var clientOptions = new RestClientOptions("https://your-api-url.com") { ThrowOnAnyError = false // 禁用自动抛出异常 }; var client = new RestClient(clientOptions); var request = new RestRequest("/target-endpoint", Method.Get); request.AddParameter("invalid-param", "wrong-value"); var response = await client.ExecuteAsync<YourResponseModel>(request); if (!response.IsSuccessful) { // 获取错误响应体 string errorResponseJson = response.Content; var errorDetails = System.Text.Json.JsonSerializer.Deserialize<YourErrorModel>(errorResponseJson); // 处理错误 Console.WriteLine($"请求失败,状态码:{response.StatusCode},错误信息:{errorDetails?.Details}"); }
说明
RestSharp 108.x版本中ThrowOnAnyError默认值为true,所以默认会在非成功状态码时抛出异常。上述两种方案都能完整获取到Fiddler中看到的JSON响应体,根据你的代码风格选择即可。
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

