【发布时间】:2018-12-07 09:15:25
【问题描述】:
我有一个包含两个项目的 Visual Studio 解决方案; 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 行收到错误消息
[Route("item/{itemNumber}")]
public async Task<IActionResult> IndexForItem(int itemNumber)
{
var client = GetClient();
//ERROR: In next line, HttpResponseMessage it tries to call my API controller and fails
HttpResponseMessage response = await client.GetAsync($@"api/Auction/SeeOneItem/{itemNumber}");
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
var model = await response.Content.ReadAsAsync<AuctionItemProxy>();
return View(model);
}
else
{
return Content("An error occured.");
}
}
API 控制器(注意:我在此方法中的断点永远不会命中)
[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);
}
我收到的实际错误
IOException: Unable to read data from the transport connection
【问题讨论】:
-
两个项目在同一个解决方案中使用 IIS Express?当您运行第二个(MVC)时,您确定第一个(API)实际上正在运行吗?
-
如果表定义中存在循环引用,也会出现此问题。尝试禁用延迟加载和代理创建(假设使用 EF Core)。
-
@sellotape 是的,问题已在答案中正确识别。感谢您的帮助
-
@D-johnAnshani 感谢您的链接,问题已在下面的答案中确定
标签: c# asp.net-mvc api controller httpclient