Я пишу свои первые API-контроллеры, но у меня возникают проблемы, когда я пытаюсь включить свойство навигации, например: когда я делаю запрос, такой как
public IEnumerable<Batch> GetByItemId(long itemId)
{
return context.Batch.Where(b => b.ItemId == itemId).ToArray();// It works
}
Я получаю ожидаемый результат (используя powershell):
Invoke-RestMethod http://localhost:5000/api/batch/10 -Method Get
id : 50
creationDate : 2018-11-04T00:46:05.665537
itemId : 10
item :
expirationDate : 2019-01-16T00:00:00
batchLocations :
id : 65
creationDate : 2018-11-04T01:30:54.492142
itemId : 10
item :
expirationDate : 2019-01-01T00:00:00
batchLocations :
Но когда я пытаюсь включить свойство навигации BatchLocation:
public IEnumerable<Batch> GetByItemId(long itemId)
{
return context.Batch
.Where(b => b.ItemId == itemId)
.Include(b => b.BatchLocations)
.ToArray();
}
Метод GetByItemId возвращает ожидаемый IEnumerable (я его отлаживал), но я получаю следующую ошибку:
Invoke-RestMethod http://localhost:5000/api/batch/10 -Method Get
Invoke-RestMethod : Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.
At line:1 char:1
+ Invoke-RestMethod http://localhost:5000/api/batch/10 -Method Get
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Invoke-RestMethod], IOException
+ FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand
[Route("api/[controller]")]
public class BatchController : Controller
{
private IUnitOfWork unitOfWork;
public BatchController(IUnitOfWork unitOfWork)
{
this.unitOfWork = unitOfWork;
}
[HttpGet("{id}")]
public IEnumerable<Batch> GetById(long id) => unitOfWork.Batchs.GetByItemId(id);
}
Код репозитория:
public class Repository<T> : IRepository<T> where T : class
{
protected readonly AppDbContext context;
public Repository(AppDbContext ctx) => context = ctx;
}
public class BatchRepository : Repository<Batch>, IBatchRepository
{
public BatchRepository(AppDbContext ctx) : base(ctx)
{}
public IEnumerable<Batch> GetByItemId(long itemId)
{
return context.Batch.Where(b => b.ItemId == itemId).Include(b => b.Item).ToArray();// Problem
// return context.Batch.Where(b => b.ItemId == itemId).ToArray(); //It works
}
}
Снимок экрана с информацией об отладке:
Отладочная информация
Когда я пытаюсь использовать контроллер Api, используя React
import React, { Component } from 'react'
class ItemInfo extends Component {
constructor(props) {
super(props);
this.state = { batchs: [] };
this.renderBatchs = this.renderBatchs.bind(this);
fetch('api/batch/'+this.props.itemId)
.then(response => response.json())
.then(batchInfo => {
this.setState({ batchs: batchInfo });
}).catch(function (error) {
console.log('There has been a problem with your fetch operation: ', error.message);
});;
}
renderBatchs() {
return (
<table>
<thead>
<tr><th>Id</th></tr>
</thead>
<tbody>
{this.state.batchs.map((batch, index) => (
<tr key={index}><th>{batch.id}</th></tr>
))}
</tbody>
</table>
)
}
render() {
const batchs = this.renderBatchs();
return (
<div>
{batchs}
</div>
)
}
}
export default ItemInfo;
Я получаю следующее консольное сообщение:
GET http://localhost:5000/api/batch/1 net::ERR_CONNECTION_RESET
There has been a problem with your fetch operation: Failed to fetch
И я не знаю, почему, любое предложение или ссылка будут оценены.