132 lines
4.4 KiB
C#
132 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.Newtonsoft;
|
|
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();
|
|
}
|
|
}
|
|
}
|