Blue Prism Web API调用带body的GET接口报无法发送内容正文错误
问题根因
抛出Internal : Unexpected error Cannot send a content-body with this verb-type错误的核心原因,和Blue Prism Web API服务配置、HTTP Utility工具的逻辑无关:这两个内置功能底层依赖.NET Framework原生的HttpWebRequest类实现,该类默认严格遵循HTTP协议规范做了硬校验,直接拦截所有携带请求体的GET、HEAD类型请求,在请求发出前就抛出错误,和你怎么构造请求体内容、怎么配置内置模板没有关系。
可行解决方案
不要使用内置的Web API服务、HTTP Utility组件发起该请求,直接通过对象的代码阶段调用无该强制校验的HTTP客户端实现,步骤如下:
- 在你的业务对象中新增一个代码阶段,先添加程序集引用
System.Net.Http,同时引入对应命名空间 - 在代码阶段配置好输入参数:接口地址
apiUrl(文本类型)、请求体内容requestBody(文本类型)、请求体格式contentType(文本类型,比如传application/json);配置输出参数:响应状态码statusCode(数字类型)、响应内容responseContent(文本类型) - 在代码阶段填入以下逻辑:
using (var httpClient = new HttpClient()) { var reqMessage = new HttpRequestMessage() { Method = HttpMethod.Get, RequestUri = new Uri(apiUrl), Content = new StringContent(requestBody, Encoding.UTF8, contentType) }; // 如果接口需要携带鉴权头、自定义请求头,可直接操作reqMessage.Headers添加 var resp = httpClient.SendAsync(reqMessage).Result; statusCode = (int)resp.StatusCode; responseContent = resp.Content.ReadAsStringAsync().Result; }
- 直接运行该代码阶段即可正常发起携带请求体的GET请求,不会触发原有的verb-type报错。
如果你的Blue Prism运行环境是低于6.4的老版本,无法直接引用System.Net.Http,可以替换为在代码阶段调用PowerShell命令发起请求,核心是绕开HttpWebRequest的硬校验逻辑即可。
注意事项
- 不要尝试修改内置Web API、HTTP Utility的配置项,这两个组件没有提供关闭GET请求体校验的开关,所有配置调整都无法绕过底层的硬拦截。
- 如果调用HTTPS接口遇到证书校验错误,可在代码最开头添加
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };临时跳过校验,生产环境建议使用合法证书不要开启该配置。 - 若接口有超时要求,可直接给
httpClient.Timeout赋值设置对应超时时长。
内容的提问来源于stack exchange,提问作者HiSpy
相关产品推荐
相关产品推荐

