Проблема при попытке вернуть запрос, включающий свойство навигации, с помощью API-контроллера - PullRequest
0 голосов
/ 05 ноября 2018

Я пишу свои первые 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

И я не знаю, почему, любое предложение или ссылка будут оценены.

1 Ответ

0 голосов
/ 06 ноября 2018

С ошибкой, обнаруженной с помощью React, я обнаружил, что это сообщение ERR_CONNECTION_RESET, возвращающее Async, включая дочерние коллекции объектов , это та же проблема с тем же решением: у меня есть свойства навигации как для модели Batch, так и для модели Item, и Я возвращался к модели персистентности, я просто не знал этого «НЕ ИСПОЛЬЗУЙ. ИСПОЛЬЗОВАНИЕ. МОДЕЛИ. КАК. ВОЗВРАТ. ДЕЙСТВИЙ» . Затем я создал ViewModel, и все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...