ASP.NET Core连接localhost API遇Connection refused错误求助
ASP.NET Core连接本地API时出现「Connection refused」错误排查
错误信息
System.Net.Http.HttpRequestException: Connection refused. (localhost:7146)
补充说明
项目需求是给Category表添加新数据。在给CategoryController1.cs添加HttpGet和HttpPost操作之前,应用可正常运行:按Ctrl+F5启动后,能从Index.cshtml页面通过Ctrl+Shift+W导航到设计页面。但添加完这些操作后,直接从Index.cshtml运行应用时,在以下位置报错:
SignalRWebUI.Controllers.CategoryController1.Index() in CategoryController1.cs + var responseMessage = await client.GetAsync("https://localhost:7146/api/Category");
相关代码片段
1. CategoryController1.cs
public class CategoryController1 : Controller { private readonly IHttpClientFactory _httpClientFactory; public CategoryController1(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } public async Task<IActionResult> Index() { var client = _httpClientFactory.CreateClient(); var responseMessage = await client.GetAsync("https://localhost:7146/api/Category"); if(responseMessage.IsSuccessStatusCode) { var jsonData=await responseMessage.Content.ReadAsStringAsync(); var values =JsonConvert.DeserializeObject<List<ResultCategoryDto>>(jsonData);//Verileri çekme için return View(values); } return View(); } [HttpGet] public IActionResult CreateCategory() { return View(); } [HttpPost] public async Task<IActionResult> CreateCategory(CreateCategoryDto createCategoryDto) { createCategoryDto.Status = true; var client= _httpClientFactory.CreateClient(); var jsonData = JsonConvert.SerializeObject(createCategoryDto); StringContent stringContent = new StringContent(jsonData,Encoding.UTF8,"application/json"); var responseMessage = await client.PostAsync("https://localhost:7146/api/Category",stringContent); if(responseMessage.IsSuccessStatusCode) { return RedirectToAction("Index"); } return View(); } }
2. Index.cshtml
@model List<SignalRWebUI.Dtos.CategoryDtos.ResultCategoryDto> @{ ViewData["Title"] = "Index"; Layout = "~/Views/AdminLayoutController1/Index.cshtml"; } <div class="content"> <div class="container-fluid"> <h4 class="page-title">Kategori İşlemleri</h4> <div class="row"> <div class="col-md-12"> <div class="card"> <div class="card-header"> <div class="card-title">Kategori Listesi</div> </div> <div class="card-body"> <div class="card-sub"> Kategori ile ilgili işlemleri aşağıdan gerçekleştirebilirsiniz : </div> <table class="table mt-3"> <thead> <tr> <th scope="col">#</th> <th scope="col">Kategori Adı</th> <th scope="col">Durum</th> <th scope="col">Sil</th> <th scope="col">Güncelle</th> </tr> </thead> <tbody> @foreach(var item in Model) { <tr> <td>@item.CategoryID</td> <td>@item.CategoryName</td> <td>@item.Status</td> <td><a href="#" class="btn btn-outline-danger" >Sil</a> </td> <td><a href="#" class="btn btn-outline-success" >Günelle</a> </td> </tr> } </tbody> </table> <a href="/Category/CreateCategory/" class="btn btn-outline-primary">Yeni Kategori Girişi</a> </div> </div> </div> </div> </div>
排查与解决步骤
- 确认API服务已启动:
https://localhost:7146/api/Category对应的后端API项目必须先启动运行,否则会触发连接拒绝。直接在浏览器访问该API地址,验证是否能正常返回数据;同时检查API项目的启动配置,确认监听端口确实是7146。 - 检查端口占用情况:用命令
netstat -ano | findstr :7146查看7146端口是否被其他程序占用。若被占用,可关闭占用程序,或修改API项目的监听端口。 - 验证API路由正确性:确保后端API的Category控制器存在对应的
[HttpGet]接口,路由路径/api/Category无拼写错误(包括大小写、路径层级)。 - 调整项目启动顺序:若WebUI和API是两个独立项目,需先启动API项目,再启动WebUI;也可在解决方案中设置多个启动项目,让两者同时启动。
- 排查HTTPS证书问题:若API使用HTTPS,需确保WebUI项目信任API的开发证书。可临时改用HTTP地址测试(若API支持),或手动将API证书导入系统信任存储。
- 优化HttpClient配置:避免硬编码API地址,将地址配置在
appsettings.json中;同时检查IHttpClientFactory的配置,确认无超时、代理等影响连接的异常参数。
内容的提问来源于stack exchange,提问作者omertascan
相关产品推荐
相关产品推荐

