我有一个asp.net core 3.0网站。它具有一个控制器,该控制器实现HttpGet函数,该函数执行一些数据库工作,然后返回Json对象(https:// localhost:44356 / api / runner / match)。
我有一个控制台应用程序,它使用HttpClient来访问该URL。我在本地启动站点,然后启动控制台应用程序。大约有50%的时间有效。我得到的另外50%的时间:
HttpRequestException: No connection could be made because the target machine actively refused it.
SocketException: No connection could be made because the target machine actively refused it.
我试图弄清为什么控制台应用程序的连接被阻止。我不知道如何开始调试它。我尝试对请求执行重试,但是一旦获得异常,我就会继续获取它。因此,我认为这是我网站中发生的不确定性事件,可能与SSL有关?
我可以在Chrome中本地访问网址。
我如何找出阻止连接的原因?
这是IIS Express正在做的事情吗?
在控制台应用程序中调用代码:
static async Task<List<Deck>> GetMatchData()
{
string baseUrl = "https://localhost:44356/api/runner/match";
using (HttpClient client = new HttpClient())
{
HttpResponseMessage res = null;
res = await client.GetAsync(baseUrl);
控制器功能:
[HttpGet("match")]
public async Task<ActionResult> GetMatchup()
{
int count = db.Decks.Count();
Random r = new Random();
int d1 = r.Next(count) + 1; // database ids start at 1 for some reason
int d2 = r.Next(count - 1) + 1;
if (d1 == d2)
d2++;
List<Deck> result = new List<Deck>();
result.Add(await db.Decks.FindAsync(d1));
result.Add(await db.Decks.FindAsync(d2));
if (result[0] == null || result[1] == null)
{
return BadRequest();
}
return Ok(result);
}
答案 0 :(得分:-1)
尝试
HttpClient httpClient = new HttpClient();
//specify to use TLS 1.2 as default connection
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
string baseUrl = "https://localhost:44356/api/runner/match";
httpClient.BaseAddress = new Uri(baseUrl );
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var getResult = await httpClient.GetAsync(baseUrl);