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

使用RestSharp发送大体积OFX请求时自动添加Expect头的问题

解决RestSharp发送OFX请求时自动添加Expect头导致服务器错误的问题

遇到这种情况确实很棘手——RestSharp默认会在请求体超过1024字节时自动添加Expect: 100-continue头,而不少老旧的银行OFX服务器并不支持这个HTTP特性,直接返回错误。下面给你两个可靠的解决办法:

方法一:全局禁用Expect头(推荐)

直接修改RestClient使用的HttpClientHandler,全局关闭ExpectContinue特性,这样所有请求都不会再发送这个头:

// 创建自定义HttpClientHandler,禁用ExpectContinue
var handler = new HttpClientHandler
{
    ExpectContinue = false
};

// 用这个handler初始化RestClient
var client = new RestClient(handler);

如果是使用RestSharp的RestClientOptions配置方式,也可以通过ConfigureMessageHandler来修改:

var options = new RestClientOptions("https://your-bank-ofx-api.com")
{
    ConfigureMessageHandler = handler =>
    {
        if (handler is HttpClientHandler httpClientHandler)
        {
            httpClientHandler.ExpectContinue = false;
        }
        return handler;
    }
};

var client = new RestClient(options);

方法二:针对单个请求移除Expect头

如果你不想全局修改,只想针对特定的OFX请求处理,可以在请求发送前手动移除这个头:

var request = new RestRequest("/your-ofx-endpoint", Method.Post);

// 设置OFX请求体和正确的Content-Type
request.AddParameter("application/x-ofx", yourOfxRequestContent, ParameterType.RequestBody);

// 在请求发送前移除Expect头
request.OnBeforeRequest = httpRequest =>
{
    httpRequest.Headers.Remove("Expect");
};

// 执行请求
var response = await client.ExecuteAsync(request);

原理说明

Expect: 100-continue是HTTP/1.1的一个优化机制,客户端先发送这个头询问服务器是否愿意接收大请求体,等服务器返回100 Continue后再发送实际内容。但很多老系统(尤其是部分银行的OFX服务器)没有实现这个特性,直接返回错误。禁用这个选项后,RestSharp会直接发送完整的请求体,跳过协商步骤,就能正常和服务器交互了。

另外要注意确保你的请求Content-Type设置正确(通常是application/x-ofx),避免因为格式问题引发其他错误。

内容的提问来源于stack exchange,提问作者Ryan Rightmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:02:07