131 lines
4.4 KiB
C#

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<AbpControllerOptions>(nameof(AbpControllerOptions));
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
base.ConfigureServices(context);
Configure<AbpExceptionHandlingOptions>(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<AbpControllerOptions>();
ConfigureConventionalControllers(options);
var fileSetting = context.Services.GetConfiguration()?.GetSection("FileSetting");
Configure<FilesOption>(fileSetting);
Configure<AbpControllerOptions>(o =>
{
o.UrlRootPathMap = options.UrlRootPathMap;
o.DefaultRoot = options.DefaultRoot;
});
Configure<MvcOptions>(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<AbpAspNetCoreMvcOptions>(options =>
{
if (sycAssemblys.Any())
{
foreach (var item in sycAssemblys)
{
options.ConventionalControllers.Create(item, o =>
{
o.UseV3UrlStyle = true;
o.RootPath = controllerOptions.DefaultRoot;
});
}
}
});
}
/// <summary>
/// 匹配控制器名称
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
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();
}
}
}