使用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
相关产品推荐
相关产品推荐

