当URL包含端口时,PostAsync不起作用

时间:2016-04-22 09:48:01

标签: c# asp.net-mvc post

我的.net应用程序尝试使用以下代码访问外部API ...

using (var keyClient = new HttpClient())
{
    keyClient.BaseAddress = new Uri(ConfigurationManager.AppSettings["webshopurl"]);
    var content = new FormUrlEncodedContent(new[]
    {
        new KeyValuePair<string, string>("api_username",
            ConfigurationManager.AppSettings["webshopAPIUserName"]),
        new KeyValuePair<string, string>("api_password",
            ConfigurationManager.AppSettings["webshopAPIPassword"])
    });
    var result = keyClient.PostAsync("/api/v1/key.php", content).Result;
    token = result.Content.ReadAsStringAsync().Result;
}

从本地计算机呼叫时,它可以正常工作。但是当它托管在诸如http://app.test.net:5000/test之类的在线服务器URL中时,它不会调用API。如果我们托管像http://app.test.net/test这样的网址,它就能正常运行。

这是什么原因?

1 个答案:

答案 0 :(得分:1)

为什么使用.Result来解压缩结果?使用awaitasync方法获取结果要好得多。 如果您不小心上下文,.Result会导致死锁。

Stephen Cleary有一篇非常好的文章,详细介绍。

Don't Block on Async Code