Nuget控制檯:javascript
Install-Package log4net Install-Package Newtonsoft.Json Install-Package Autofac Install-Package Autofac.Extensions.DependencyInjection Install-Package AutoMapper Install-Package Dapper Install-Package Microsoft.Extensions.Options Install-Package Microsoft.Extensions.Caching.Abstractions Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design Install-Package Oracle.EntityFrameworkCore Install-Package Oracle.ManagedDataAccess.Core Install-Package Microsoft.EntityFrameworkCore Install-Package Microsoft.EntityFrameworkCore.Relational Install-Package Microsoft.EntityFrameworkCore.Design Install-Package Microsoft.EntityFrameworkCore.Tools Scaffold-DbContext -Force "Data Source=" Oracle.EntityFrameworkCore-OutputDir Models/DataModels -Context MyDbContext -Schemas aaa -Tables bbb
Scaffold命令格式:java
Scaffold-DbContext [-Connection] <String> [-Provider] <String>
[-OutputDir <String>] [-Context <String>] [-Schemas <String>]
[-Tables <String>] [-DataAnnotations] [ -Force] [-Project <String>]
[-StartupProject <String>] [-Environment <String>] [<CommonParameters>]ios
Startup.csgit
public class Startup { //log4net日誌 public static ILoggerRepository LogRepository { get; set; } public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; Init(); } public void Init() { // 加載log4net日誌配置文件 LogRepository = LogManager.CreateRepository("NETCoreRepository"); XmlConfigurator.Configure(LogRepository, new FileInfo("log4net.config")); LogHelper.RepositoryName = LogRepository.Name; // appSettings 配置類初始化 //ConfigHelper.Init(Configuration.GetSection("appSettings")); // 惟一Id生成器 //SnowflakeInit.Init(Configuration); // 郵件初始化 //MailInit.Init(Configuration); // 系統啓動日誌 LogHelper.Write("TestApi Start()"); } /// <summary> /// 此方法由運行時調用。使用此方法向容器添加服務。 /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> public IServiceProvider ConfigureServices(IServiceCollection services) { //註冊Cookie認證服務 //services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(); // 添加MemoryCache services.AddMemoryCache(); // 支持HttpContext services.AddHttpContextAccessor(); services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); // 實現小寫的路由URL services.AddRouting(options => options.LowercaseUrls = true); // 添加自動映射 //services.AddAutoMapper(); // 對 JSON 數據使用混合大小寫。駝峯式,可是javascript 首字母小寫形式. 默認值 // services.AddMvc().AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); }); services.AddMvc().AddJsonOptions(options => { // 忽略循環引用 options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore; // 對 JSON 數據使用混合大小寫。跟屬性名一樣的大小.輸出 options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver(); // 格式化json日期 options.SerializerSettings.Converters.Add(new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss'.'fff" }); // long型轉string options.SerializerSettings.Converters.Add(new Utils.LongToStringConverter()); }); //配置跨域處理,容許全部來源: services.AddCors(options => { options.AddPolicy("cors", set => { set.SetIsOriginAllowed(origin => true). //容許任何來源的主機訪問 AllowAnyHeader(). AllowAnyMethod(). AllowCredentials(); //指定處理cookie }); }); // 添加EF Oracle支持 services.AddDbContext<MyDbContext>(options => options.UseOracle(Configuration.GetConnectionString("OracleConnectionString"))); // 若是使用SQL Server 2008數據庫,請添加UseRowNumberForPaging的選項 // 參考資料:https://github.com/aspnet/EntityFrameworkCore/issues/4616 // options.UseSqlServer(Configuration.GetConnectionString("MyDbContent"),b=>b.UseRowNumberForPaging()) // 添加Dapper //services.AddDapper("OracleConnection", options => //{ // options.ConnectionString = Configuration.GetConnectionString("OracleConnectionString"); // options.DbType = DbStoreType.Oracle; //}); // Add service filters. //services.AddScoped<MyAuthAttribute>(); //services.AddSingleton<MyAuthRepository>(); //注入全局異常捕獲 services.AddMvc(options => { options.Filters.Add(typeof(GlobalExceptions)); // By type }); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); // 註冊Autofac return RegisterAutofac(services); } private IServiceProvider RegisterAutofac(IServiceCollection services) { //實例化Autofac容器 var builder = new ContainerBuilder(); //將Services中的服務填充到Autofac中 builder.Populate(services); //新模塊組件註冊 builder.RegisterModule<AutofacModule>(); //建立容器 var Container = builder.Build(); //第三方IOC接管 core內置DI容器 return new AutofacServiceProvider(Container); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env, IApplicationLifetime appLifetime) { 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.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseCors("cors"); app.UseMvc(); //程序中止調用函數 //appLifetime.ApplicationStopped.Register(() => { AutofacContainer.Dispose(); }); } }
Program:github
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) { var configuration = new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory) .AddJsonFile("host.json") .Build(); return WebHost.CreateDefaultBuilder(args) .UseUrls(configuration["urls"]) .UseStartup<Startup>(); } }
host.json數據庫
{ "urls": "http://*:8080;https://*:443" }
AutofacModulejson
public class AutofacModule : Autofac.Module { /// <summary> /// 重寫Autofac管道Load方法,在這裏註冊注入 /// </summary> /// <param name="builder"></param> protected override void Load(ContainerBuilder builder) { builder.RegisterType<MyDbContext>(); //註冊Service中的對象,Service中的類要以Service結尾,不然註冊失敗 builder.RegisterAssemblyTypes(GetAssemblyByName("WebTest.BLL")).Where(a => a.Name.EndsWith("Service")).AsImplementedInterfaces().InstancePerLifetimeScope(); //註冊Repository中的對象,Repository中的類要以Repository結尾,不然註冊失敗 builder.RegisterAssemblyTypes(GetAssemblyByName("WebTest.DAL")).Where(a => a.Name.EndsWith("Repository")).AsImplementedInterfaces().InstancePerLifetimeScope(); } /// <summary> /// 根據程序集名稱獲取程序集 /// </summary> /// <param name="AssemblyName">程序集名稱</param> /// <returns></returns> public static System.Reflection.Assembly GetAssemblyByName(string AssemblyName) { return System.Reflection.Assembly.Load(AssemblyName); } }
Utils.LongToStringConverter.cs跨域
public class LongToStringConverter : JsonConverter { public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { Newtonsoft.Json.Linq.JToken jt = Newtonsoft.Json.Linq.JValue.ReadFrom(reader); return jt.Value<long>(); } public override bool CanConvert(Type objectType) { return typeof(System.Int64).Equals(objectType); } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { serializer.Serialize(writer, value.ToString()); } }