using JNPF;
using JNPF.Common.Core.Filter;
using JNPF.Common.Options;
using JNPF.EventHandler;
using JNPF.JsonSerialization;
using JNPF.UnifyResult;
using Microsoft.AspNetCore.HttpOverrides;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json;
using OnceMi.AspNetCore.OSS;
using JNPF.API.Entry.Handlers;
using JNPF.Common.Cache;
namespace Microsoft.Extensions.DependencyInjection;
///
/// OSS服务配置拓展.
///
public static class ConfigureMvcControllerExtensions
{
///
/// OSS服务配置.
///
///
///
public static IServiceCollection ConfigureMvcController(this IServiceCollection services)
{
services.AddControllers()
.AddMvcFilter()
.AddInjectWithUnifyResult()
.AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null)
.AddNewtonsoftJson(options =>
{
// 默认命名规则
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
// 设置时区为 UTC
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
// 格式化json输出的日期格式
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
// 忽略空值
// options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
// 忽略循环引用
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
// 格式化json输出的日期格式为时间戳
options.SerializerSettings.Converters.Add(new NewtonsoftDateTimeJsonConverter());
});
// 配置Nginx转发获取客户端真实IP
// 注1:如果负载均衡不是在本机通过 Loopback 地址转发请求的,一定要加上options.KnownNetworks.Clear()和options.KnownProxies.Clear()
// 注2:如果设置环境变量 ASPNETCORE_FORWARDEDHEADERS_ENABLED 为 True,则不需要下面的配置代码
services.Configure(options =>
{
options.ForwardedHeaders = ForwardedHeaders.All;
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
// Jwt处理程序
services.AddJwt(enableGlobalAuthorize: true);
// 跨域
services.AddCorsAccessor();
services.AddConfigurableOptions();
services.AddSession();
services.AddMemoryCache(); // 使用本地缓存必须添加
services.AddSingleton();
return services;
}
}