

我正在测试REST,当我在Postman上试用它时,它工作得很好。但是,在某些场景(与发布HttpClient数据相关)中,如果我使用XML发布,我将收到以下错误:
无法从传输连接读取数据:现有连接被远程主机强制关闭。
但是,同样的XML内容可以很好地工作在Postman上,状态确定和正确的响应。
使用C# HttpClient API和postman测试有什么区别?如何将API调用配置为与postman的行为匹配?
这里我附上了源代码和邮递员的截图。
public void createLoan()
{
string baseCreateLoanUrl = @"https://serverhost/create?key=";
var strUCDExport = XDocument.Load(@"C:\CreateLoan_testcase.xml");
using (var client = new HttpClient())
{
var content = new StringContent(strUCDExport.ToString(), Encoding.UTF8, Mediatype);
string createLoanApi = string.Concat(baseCreateLoanUrl, APIKey);
try
{
var response = client.PostAsync(createLoanApi, content).Result;
}
catch (Exception ex)
{
MessageBox.Show("Error Happened here...");
throw;
}
if (response.IsSuccessStatusCode)
{
// Access variables from the returned JSON object
string responseString = response.Content.ReadAsStringAsync().Result;
JObject jObj = JObject.Parse(responseString);
if (jObj.SelectToken("failure") == null)
{
// First get the authToken
string LoanID = jObj["loanStatus"]["id"].ToString();
MessageBox.Show("Loan ID: " + LoanID);
}
else
{
string getTokenErrorMsg = string.Empty;
JArray errorOjbs = (JArray) jObj["failure"]["errors"];
foreach (var errorObj in errorOjbs)
{
getTokenErrorMsg += errorObj["message"].ToString() + Environment.NewLine;
}
getTokenErrorMsg.Dump();
}
}
}发布于 2016-12-13 22:37:28
感谢Nard的评论,在比较了标题之后,我发现我的客户端标题有以下问题: Expect: 100-继续
而邮递员却没有。
一旦我通过使用ServicePointManager删除了它:
ServicePointManager.Expect100Continue = false;现在一切似乎都好起来了。谢谢所有的输入!
发布于 2016-12-13 20:16:30
我的直觉告诉我这很简单。首先,我们知道API的工作原理,所以我认为这取决于您是如何使用HttpClient的。
首先,按照this SO answer的建议,尝试将其创建为单例,并完全放弃using语句,因为大家的共识是,不需要处理HttpClient:
private static readonly HttpClient HttpClient = new HttpClient();我认为可能是因为您的内容编码行存在问题,或者是您的内容编码行出现问题,导致API出现问题。你是不是遗漏了一些不喜欢的东西,我敢打赌邮递员和这里的要求是有区别的。也许可以尝试以JSON ala的形式发送它:
var json = JsonConvert.SerializeObject(strUCDExport.ToString());
var content = new StringContent(json, Encoding.UTF8, Mediatype);也许邮递员和你的头像会显示出一些缺失的东西,我想真正的答案就在那里。让fiddler在后台运行,通过邮递员发送它,检查它,然后运行您的代码并重新检查。密切关注来自Postman的标题上的所有属性标记,API起作用,因此缺少一些东西。费德勒会告诉你的。
发布于 2020-01-16 10:02:20
当我被Fiddler绊倒时,我挣扎了两天,Fiddler允许你记录服务的流量。在比较了调用之后,我发现代码中漏掉了一个标头。
https://stackoverflow.com/questions/41129203
复制相似问题