You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RestSharp调用POST接口遇422错误无法获取响应内容的解决方法

解决422错误无法获取响应内容的问题

问题根源

你当前配置了ThrowOnAnyError = true,这会让RestClient在收到非成功状态码(比如422)时直接抛出异常,导致代码无法进入else分支读取response.Content,而是直接跳到catch块。

解决方案

方案1:关闭自动抛异常

修改RestClientOptions,将ThrowOnAnyError设为false,这样PostAsync会返回所有状态码的响应,你可以在else分支正常解析错误内容:

options = new RestClientOptions
{
    ThrowOnAnyError = false,
    MaxTimeout = -1,
};

修改后,原有代码的else分支会被触发,能正常反序列化服务端返回的错误响应。

方案2:捕获RestSharp的ApiException

如果不想改变ThrowOnAnyError的配置,可以在catch块中优先捕获RestSharp的ApiException,该异常包含完整的响应信息:

public async Task<Procesar> SendProcessAsync(Procesar procesar)
{
    try
    {
        var client = new RestClient(options);
        var request = new RestRequest($"{url}request/{procesar.request_token}/process", Method.Post);
        request.AddHeader("Content-Type", "application/json");
        request.AddHeader("Accept", "application/json");
        request.AddHeader("Authorization", $"Bearer {token.access_token}");
        var param = new { procesar.status_node, procesar.worknote };
        request.AddBody(param);
        var response = await client.PostAsync(request);
        if (response.IsSuccessful)
        {
            return JsonConvert.DeserializeObject<Procesar>(response.Content);
        }
        else
        {
            throw new Response_Exception(JsonConvert.DeserializeObject<Response_Error>(response.Content));
        }
    }
    catch (ApiException apiEx)
    {
        if (apiEx.Response != null && !string.IsNullOrEmpty(apiEx.Response.Content))
        {
            var error = JsonConvert.DeserializeObject<Response_Error>(apiEx.Response.Content);
            logger.Error($"请求失败: {error.error_msg}", apiEx);
            throw new Response_Exception(error);
        }
        logger.Error(apiEx);
        throw;
    }
    catch (Exception exception)
    {
        logger.Error(exception);
        throw;
    }
}

注意:需要确保项目引用了RestSharp,并且Response_Error类的结构与服务端返回的错误JSON完全匹配,否则反序列化会失败。示例Response_Error结构如下:

public class Response_Error
{
    public int error_code { get; set; }
    public string error_msg { get; set; }
    public ExtraData extra_data { get; set; }
}

public class ExtraData
{
    public string message { get; set; }
    public List<ErrorDetail> errors { get; set; }
}

public class ErrorDetail
{
    public string field { get; set; }
    public string message { get; set; }
    public string parameters { get; set; }
}

内容的提问来源于stack exchange,提问作者Arturo Perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:59:54