首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C# HttpClient API和postman测试之间的区别?客户端调用适用于邮递员,但不适用于C# httpClient getAsync。

使用C# HttpClient API和postman测试之间的区别?客户端调用适用于邮递员,但不适用于C# httpClient getAsync。
EN

Stack Overflow用户
提问于 2016-12-13 19:37:44
回答 3查看 7.1K关注 0票数 7

我正在测试REST,当我在Postman上试用它时,它工作得很好。但是,在某些场景(与发布HttpClient数据相关)中,如果我使用XML发布,我将收到以下错误:

无法从传输连接读取数据:现有连接被远程主机强制关闭。

但是,同样的XML内容可以很好地工作在Postman上,状态确定和正确的响应。

使用C# HttpClient API和postman测试有什么区别?如何将API调用配置为与postman的行为匹配?

这里我附上了源代码和邮递员的截图。

代码语言:javascript
复制
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();
            }
        }
    }
EN

回答 3

Stack Overflow用户

发布于 2016-12-13 22:37:28

感谢Nard的评论,在比较了标题之后,我发现我的客户端标题有以下问题: Expect: 100-继续

而邮递员却没有。

一旦我通过使用ServicePointManager删除了它:

代码语言:javascript
复制
ServicePointManager.Expect100Continue = false;

现在一切似乎都好起来了。谢谢所有的输入!

票数 5
EN

Stack Overflow用户

发布于 2016-12-13 20:16:30

我的直觉告诉我这很简单。首先,我们知道API的工作原理,所以我认为这取决于您是如何使用HttpClient的。

首先,按照this SO answer的建议,尝试将其创建为单例,并完全放弃using语句,因为大家的共识是,不需要处理HttpClient:

代码语言:javascript
复制
    private static readonly HttpClient HttpClient = new HttpClient();

我认为可能是因为您的内容编码行存在问题,或者是您的内容编码行出现问题,导致API出现问题。你是不是遗漏了一些不喜欢的东西,我敢打赌邮递员和这里的要求是有区别的。也许可以尝试以JSON ala的形式发送它:

代码语言:javascript
复制
     var json = JsonConvert.SerializeObject(strUCDExport.ToString());
     var content = new StringContent(json, Encoding.UTF8, Mediatype);

也许邮递员和你的头像会显示出一些缺失的东西,我想真正的答案就在那里。让fiddler在后台运行,通过邮递员发送它,检查它,然后运行您的代码并重新检查。密切关注来自Postman的标题上的所有属性标记,API起作用,因此缺少一些东西。费德勒会告诉你的。

票数 3
EN

Stack Overflow用户

发布于 2020-01-16 10:02:20

当我被Fiddler绊倒时,我挣扎了两天,Fiddler允许你记录服务的流量。在比较了调用之后,我发现代码中漏掉了一个标头。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41129203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档