using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.ApplicationModels; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Options; using Syc.Abp.Application.Contracts.Converter; using Syc.Abp.Application.Contracts.Filter; using Syc.Abp.Application.Contracts.Options; using Syc.Abp.Application.Contracts.Route; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.AspNetCore.ExceptionHandling; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.Conventions; using Volo.Abp.AspNetCore.Mvc.ExceptionHandling; using Volo.Abp.AspNetCore.Mvc.Validation; using Volo.Abp.Json; using Volo.Abp.Json.SystemTextJson.JsonConverters; using Volo.Abp.Modularity; namespace Syc.Abp.Application.Contracts { public class SycAbpContractsModule:AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) { base.PreConfigureServices(context); context.Services.AddOptions(nameof(AbpControllerOptions)); } public override void ConfigureServices(ServiceConfigurationContext context) { base.ConfigureServices(context); Configure(options => { options.SendStackTraceToClients = false; options.SendStackTraceToClients = false; }); context.Services.AddMvc(options => { options.Filters.Add(typeof(AppExceptionFilter)); options.Filters.Add(typeof(AppActionFilter)); options.Filters.Add(typeof(AppResultFilter)); }); } public override void PostConfigureServices(ServiceConfigurationContext context) { base.PostConfigureServices(context); var options = context.Services.ExecutePreConfiguredActions(); ConfigureConventionalControllers(options); var fileSetting = context.Services.GetConfiguration()?.GetSection("FileSetting"); Configure(fileSetting); Configure(o => { o.UrlRootPathMap = options.UrlRootPathMap; o.DefaultRoot = options.DefaultRoot; }); Configure(options => { var abpExceptionFilter = new ServiceFilterAttribute(typeof(AbpExceptionFilter)); var abpValidationActionFilter = new ServiceFilterAttribute(typeof(AbpValidationActionFilter)); options.Filters.Remove(abpExceptionFilter); options.Filters.Remove(abpValidationActionFilter); }); } public override void OnPostApplicationInitialization(Volo.Abp.ApplicationInitializationContext context) { base.OnPostApplicationInitialization(context); } private void ConfigureConventionalControllers(AbpControllerOptions controllerOptions) { var sycAssemblys = AppDomain.CurrentDomain.GetAssemblies().Where(e => e.GetName().Name.StartsWith("Syc.")).ToList(); Configure(options => { if (sycAssemblys.Any()) { foreach (var item in sycAssemblys) { options.ConventionalControllers.Create(item, o => { o.UseV3UrlStyle = true; o.RootPath = controllerOptions.DefaultRoot; }); } } }); } /// /// 匹配控制器名称 /// /// /// private static string NormalControllerName(string name) { if (string.IsNullOrWhiteSpace(name)) return name; if (name.ToLower().EndsWith("apis")) { name = name[..(name.Length - 4)]; } else if (name.ToLower().EndsWith("api")) { name = name[..(name.Length - 3)]; } return name.ToLower(); } } }