在BizTalk项目中使用WCF-WebHttp适配器调用REST API时,如果响应的HTTP状态码为400,则会抛出异常。这是因为WCF-WebHttp适配器默认只会接受HTTP状态码为200的响应。为了解决这个问题,可以在适配器绑定中设置以下属性:
可以看到,在上面的示例中,webHttp元素具有默认BodyStyle和OutgoingResponseFormat. 注意,这样设置可以接收所有状态码,因此需要在代码中进行处理,以防止其他状态码的异常影响系统的运行。
以下是使用HttpClient对象进行REST API调用的示例代码:
HttpClient httpClient = new HttpClient(); HttpStatusCode statusCode; string responseContent;
Uri requestUri = new Uri("http://restapi.example.com"); HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, requestUri); HttpResponseMessage responseMessage = httpClient.SendAsync(requestMessage).Result;
statusCode = responseMessage.StatusCode; responseContent = responseMessage.Content.ReadAsStringAsync().Result;
if (statusCode == HttpStatusCode.OK) { // process successful response } else if ((int)statusCode >= 400 && (int)statusCode <= 499) { // process 4xx client error response } else if ((int)statusCode >= 500 && (int)statusCode <= 599) { // process 5xx server error response } else { throw new Exception("Unexpected HTTP status code: " + statusCode); }