Я добавил бриз в свой веб-интерфейс, но он по-прежнему не добавляет настраиваемые свойства $ id и $ type - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь добавить Breeze в мой .Net Core 2.2 webapi и не могу понять, чего мне не хватает. Для устранения неполадок я создал очень простой веб-интерфейс, который возвращает 1 элемент. Это работает, но Breeze не добавляет свои пользовательские свойства в мои объекты.

Я добавил [BreezeQueryFilter] в свой контроллер, но свойства $ id и $ type не добавляются в мои объекты.

Я создал простой репозиторий с тем, что у меня есть.

https://github.com/wstow/SimpleBreeze

Спасибо

Мой контроллер

[Route("api/[controller]/[action]")]
[BreezeQueryFilter]
public class OrderController : Controller
{
    private OrderContext _context;

    private OrderManager PersistenceManager;

    public OrderController(OrderContext context)
    {
        this._context = context;
        PersistenceManager = new OrderManager(context);
    }

    [HttpGet]
    public IActionResult Metadata()
    {
        return Ok(PersistenceManager.Metadata());
    }

    [HttpGet]
    public IQueryable<ReqStatus> Status()
    {
        return PersistenceManager.Context.ReqStatus;
    }

}

Мой менеджер

 public class OrderManager : EFPersistenceManager<OrderContext>
 {
    public OrderManager(OrderContext orderContext) : base(orderContext) { }
}

Мой контекст

public class OrderContext : DbContext
    {
        public OrderContext()
        {
            //Configuration.ProxyCreationEnabled = false;
            // Configuration.LazyLoadingEnabled = false;
        }

        public OrderContext(DbContextOptions<OrderContext> options)
            : base(options)
        { }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        { }

        public DbSet<ReqStatus> ReqStatus { get; set; }
    }

1 Ответ

1 голос
/ 23 мая 2019

Проблема в настройках сериализации JSON. Newtonsoft.Json легко настраивается, и для правильной связи с клиентом Breeze необходимо использовать правильные настройки.

Чтобы упростить это, Breeze имеет функцию конфигурации для изменения настроек на хорошие значения по умолчанию. Вы звоните с вашего Startup.cs:

    public void ConfigureServices(IServiceCollection services)
    {

      var mvcBuilder = services.AddMvc();

      mvcBuilder.AddJsonOptions(opt => {
        var ss = JsonSerializationFns.UpdateWithDefaults(opt.SerializerSettings);
      });
      mvcBuilder.AddMvcOptions(o => { o.Filters.Add(new GlobalExceptionFilter()); });
...

Документация отсутствует, но вы можете увидеть, что JsonSerializationFns делает, , глядя в код Breeze .

В последней строке добавлен фильтр исключений, который упаковывает ошибки проверки на стороне сервера, чтобы клиент Breeze мог их обработать. Вы можете увидеть, что он делает здесь .

...