C# 无法在web应用程序中与API交互,但它在控制台应用程序中工作

C# 无法在web应用程序中与API交互,但它在控制台应用程序中工作,c#,asp.net,webclient,C#,Asp.net,Webclient,我正在将现有的控制台应用程序迁移到web应用程序。我正在控制器中进行api调用。下面的代码在console应用程序中运行良好。但在web应用程序中,我在 var result=webClient.DownloadString(sourceUrl) 消息为“无法连接到远程服务器”,内部异常为{“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应}System.exception{System.Net.Sockets.SocketException} 我尝试

我正在将现有的控制台应用程序迁移到web应用程序。我正在控制器中进行api调用。下面的代码在console应用程序中运行良好。但在web应用程序中,我在
var result=webClient.DownloadString(sourceUrl)
消息为
“无法连接到远程服务器”
,内部异常为
{“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应}System.exception{System.Net.Sockets.SocketException}

我尝试将url作为uri对象传递,编辑web.config文件以包含默认凭据、servicepointmanager等。我还尝试使用async和await使其异步。我真的不知道发生了什么。我支持一个公司代理,但api调用在控制台应用程序和Postman中运行良好

using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Web.Http;

namespace webApp.Controllers
{
    public class DataController : ApiController
    {
        private string sourceUrl="http://api.openweathermap.org/data/2.5/weather?zip=94040,us&appid=YOURID";
        [Route("")]
        public void GetAlldata()
        {
            var dataCall = DownloadData(sourceUrl);

        }


        private string DownloadData(string url)
        {
            try
            {
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
                var webClient = new WebClient();
                IWebProxy wp = WebRequest.DefaultWebProxy;
                wp.Credentials = CredentialCache.DefaultCredentials;
                webClient.Proxy = wp;
                var result = webClient.DownloadString(sourceUrl);

                return result;
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
    }
}

我想说的是,在我的家庭网络中尝试了上面的代码并成功后,我确定问题是代理问题

 IWebProxy wp = WebRequest.DefaultWebProxy;
    wp.Credentials = CredentialCache.DefaultCredentials;
    webClient.Proxy = wp;
并显式地将下面的添加到web.config中修复了它。我不知道为什么web应用程序不从代码中获取默认代理,但控制台应用程序会。对此行为的任何解释都将不胜感激

<system.net>
    <defaultProxy>
      <proxy usesystemdefault="False" proxyaddress="http://proxy.MYCOMPANY.com:8080" bypassonlocal="True" />
    </defaultProxy>
  </system.net>


我会对客户端到API的连接层进行故障排除。嗨,cmoe。你试过用谷歌搜索错误消息吗?我发现了这样的帖子:嗨,克里斯,我看到了那个链接。这就是我最后一段强调的。
API调用在console应用程序和Postman中非常有效。
Fiddler是查看di之间差异的好工具不同的电话。