Пример сервера ASP.Net Core Breeze с клиентским кодом angular / breeze? - PullRequest
0 голосов
/ 23 ноября 2018

Есть ли пример кода клиентского приложения breeze / angular, использующего сервер ASP.Net Core Breeze?

Похоже, есть следующие пакеты Nuget: - Breeze.AspNetCore.NetCore и Breeze.Composite.AspNetCore.EF6

Было бы очень полезно иметь пример TempHire, использующий эту технологию.

Можете ли вы указать мне правильное направление?число рейнольдсаПример кода внешнего / внутреннего интерфейса

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 июня 2019

Это немного путешествие, потому что сейчас есть много движущихся частей.У меня был некоторый успех в том, чтобы заставить это работать, но есть некоторые ограничения, например, я не могу использовать .expand ('entityName') на клиенте.

Я использую предварительный просмотр .NET CORE 3.0 с Entity Framework Core.Я приложил изображение всех зависимостей, которые я установил.Не все из них являются обязательными, но, вероятно, используются в проекте API.

Наиболее важные части приведенного ниже фрагмента кода - настройка параметров NewtonsoftJson.

public void ConfigureServices(IServiceCollection services)
    {

        services.AddControllers().AddNewtonsoftJson(options =>
        {
            options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;

            //THE BELOW LINE IS IMPORTANT OTHERWISE IT WILL CAMELCASE TO THE SERVER
            options.SerializerSettings.ContractResolver = new DefaultContractResolver();

            //THE BELOW LINE PREVENTS LOOPING ENTITY REFs
            options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
        });






        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

        var connection = @"Server=tcp:XXXXX.database.windows.net,1433;Initial Catalog=DBNAME;Persist Security Info=False;User ID=XXX;Password=XXXXX;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;";

        //THIS IS WHERE YOU ARE GOING TO MAKE YOUR CONTEXT INJECTABLE
        services.AddDbContext<YOURCONTEXTContext>(options => options.UseSqlServer(connection, x => x.UseNetTopologySuite()));

        var appSettingsSection = Configuration.GetSection("AppSettings");
        services.Configure<AppSettings>(appSettingsSection);

        // configure jwt authentication
        var appSettings = appSettingsSection.Get<AppSettings>();
        var key = Encoding.ASCII.GetBytes(appSettings.Token);
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options => {
            options.RequireHttpsMetadata = false;
            options.SaveToken = true;
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = new SymmetricSecurityKey(key),
                ValidateIssuer = false,
                ValidateAudience = false
            };
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseCors(x => x
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader());
        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseAuthentication();
        app.UseAuthorization();



        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}

}

Затем вам нужно настроить контроллер Breeze:

using Microsoft.AspNetCore.Authorization;
using System.Linq;
using HB.Data.Models;
using Microsoft.AspNetCore.Http;
using System.Security.Claims;
using System;
using Microsoft.AspNetCore.Mvc;
using Breeze.AspNetCore;
using HB.API.Manager;
using HB.BusinessFacade.Business;

using GeoAPI.Geometries;

using NetTopologySuite.Geometries;
using Breeze.Persistence;
using System.Threading.Tasks;
using System.Collections.Generic;
using Newtonsoft.Json.Linq;

namespace HB.API.Controllers
{


[BreezeQueryFilter]
[Route("api/[controller]/[action]")]
public class BreezeController : ControllerBase
{

    private YOURCONTEXTContext _context;
    private hbPersistenceManager PersistenceManager;
    string UserID;


    public BreezeController(YOURCONTEXTContext context, IHttpContextAccessor httpContextAccessor)
    {
        this._context = context;
        PersistenceManager = new hbPersistenceManager(context);
        //this.UserID = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value;
    }


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

А затем просто маленький помощник, который я использую для PersistenceManager

using HB.Data.Models;
using Breeze.Persistence.EFCore;
namespace HB.API.Manager
{
    public class hbPersistenceManager : EFPersistenceManager<YOURCONTEXTContext>
    { 
       public hbPersistenceManager(YOURCONTEXTContext dbContext) : base(dbContext) { }
    }
}

enter image description here

...