我已经将 breeze 添加到我的 webapi 但它仍然没有添加自定义 $id 和 $type 属性

I've added breeze to my webapi but it still not adding the custom $id and $type properties

我正在尝试将 Breeze 添加到我的 .Net Core 2.2 webapi,但我不知道我缺少什么。为了解决问题,我创建了一个非常简单的 webapi,其中包含 returns 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; }
    }

问题出在 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()); });
...

缺少文档,但您可以通过 looking in the Breeze code 查看 JsonSerializationFns 的作用。

最后一行添加了一个异常过滤器来包装 server-side 验证错误,以便 Breeze 客户端可以处理它们。你可以看到它做了什么 here.