C# ASP.NET MVC核心-通过HttpClient使用API

C# ASP.NET MVC核心-通过HttpClient使用API,c#,asp.net-mvc,api,controller,httpclient,C#,Asp.net Mvc,Api,Controller,Httpclient,我有一个包含两个项目的VisualStudio解决方案;API和MVC。MVC是包含我的视图等的MVC项目,API是包含API端点和逻辑的API项目。因为我有两个项目,所以我将我的解决方案配置为有多个启动项目 HttpClient public const string AuctionAPI = "http://localhost:44337/"; public const string AuctionClient = "http://localhost:44398/"; public sta

我有一个包含两个项目的VisualStudio解决方案;API和MVC。MVC是包含我的视图等的MVC项目,API是包含API端点和逻辑的API项目。因为我有两个项目,所以我将我的解决方案配置为有多个启动项目

HttpClient

public const string AuctionAPI = "http://localhost:44337/";
public const string AuctionClient = "http://localhost:44398/";

public static HttpClient GetClient()
{
    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri(AuctionAPI);
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
    return client;
}
MVC控制器(注意:当我设置HttpResponseMessage并尝试调用client.GetAsync()时,我在第6行收到了错误。

我收到的实际错误


IOException:无法从传输连接读取数据

此错误表示目标计算机可以访问,但您尝试访问的服务无法访问

通过查看您共享的代码,我注意到一件事。如果项目设置为使用Https,那么IIS Express将分配从443开始的端口,从而产生443xx这样的端口。 请将http方案更改为https,然后重试

public const string AuctionAPI = "http://localhost:44337/";


将项目设置更改为不使用SSL

  • 在项目上单击鼠标右键“转到属性”
  • 在“属性”窗口中,转到“调试”部分
  • 在Web服务器设置下取消选中“启用SSL”


  • 此问题也可能与传输级安全性有关。

    使用IIS Express的同一解决方案中的两个项目?是否确定在运行第二个(MVC)时第一个(API)正在实际运行?请检查此问题。如果表定义中存在循环引用,也会出现此问题。请尝试禁用延迟加载和代理创建(假设使用EF Core)。@sellotape是的,问题已在答案中正确识别。感谢您尝试help@D-johnAnshani感谢链接,问题已在下面的答案中确定
    [HttpGet("SeeOneItem/{itemNumber:int}")]
    public AuctionItem GetAuctionItem(int itemNumber)
    {
        var item = _auctionItemDataFactory.AuctionItems.First(x => x.ItemNumber == itemNumber);
        if (item == null)
        {
            return null;
        }
        return _auctionItemDataFactory.AuctionItems.First(x => x.ItemNumber == itemNumber);
    }
    
    public const string AuctionAPI = "http://localhost:44337/";
    
    public const string AuctionAPI = "https://localhost:44337/";