feat: some change

This commit is contained in:
anjoy8 2023-11-26 15:50:27 +08:00
parent 325baf8e9e
commit 62cdfb3a56
12 changed files with 14 additions and 481 deletions

View File

@ -758,7 +758,7 @@
Values控制器
</summary>
</member>
<member name="M:Blog.Core.Controllers.ValuesController.#ctor(Blog.Core.IServices.IBlogArticleServices,AutoMapper.IMapper,Blog.Core.IServices.IAdvertisementServices,Blog.Core.Model.Love,Blog.Core.IServices.IRoleModulePermissionServices,Blog.Core.Common.HttpContextUser.IUser,Blog.Core.IServices.IPasswordLibServices,Blog.Core.Common.WebApiClients.HttpApis.IBlogApi,Blog.Core.Common.WebApiClients.HttpApis.IDoubanApi,Blog.Core.Common.Https.HttpPolly.IHttpPollyHelper,Microsoft.Extensions.Options.IOptions{Blog.Core.Common.Option.SeqOptions})">
<member name="M:Blog.Core.Controllers.ValuesController.#ctor(Blog.Core.IServices.IBlogArticleServices,AutoMapper.IMapper,Blog.Core.IServices.IAdvertisementServices,Blog.Core.Model.Love,Blog.Core.IServices.IRoleModulePermissionServices,Blog.Core.Common.HttpContextUser.IUser,Blog.Core.IServices.IPasswordLibServices,Blog.Core.Common.Https.HttpPolly.IHttpPollyHelper,Microsoft.Extensions.Options.IOptions{Blog.Core.Common.Option.SeqOptions})">
<summary>
ValuesController
</summary>
@ -769,9 +769,8 @@
<param name="roleModulePermissionServices"></param>
<param name="user"></param>
<param name="passwordLibServices"></param>
<param name="blogApi"></param>
<param name="doubanApi"></param>
<param name="httpPollyHelper"></param>
<param name="seqOptions"></param>
</member>
<member name="M:Blog.Core.Controllers.ValuesController.TestSqlsugarWithCache">
<summary>
@ -854,12 +853,6 @@
</summary>
<returns></returns>
</member>
<member name="M:Blog.Core.Controllers.ValuesController.WebApiClientGetAsync">
<summary>
测试http请求 WebApiClient Get
</summary>
<returns></returns>
</member>
<member name="M:Blog.Core.Controllers.ValuesController.FluentVaTest(Blog.Core.Filter.UserRegisterVo)">
<summary>
测试Fulent做参数校验

View File

@ -3,7 +3,6 @@ using Blog.Core.Common;
using Blog.Core.Common.HttpContextUser;
using Blog.Core.Common.Https.HttpPolly;
using Blog.Core.Common.Option;
using Blog.Core.Common.WebApiClients.HttpApis;
using Blog.Core.EventBus;
using Blog.Core.EventBus.EventHandling;
using Blog.Core.Extensions;
@ -38,8 +37,6 @@ namespace Blog.Core.Controllers
private readonly IRoleModulePermissionServices _roleModulePermissionServices;
private readonly IUser _user;
private readonly IPasswordLibServices _passwordLibServices;
private readonly IBlogApi _blogApi;
private readonly IDoubanApi _doubanApi;
readonly IBlogArticleServices _blogArticleServices;
private readonly IHttpPollyHelper _httpPollyHelper;
private readonly SeqOptions _seqOptions;
@ -54,17 +51,14 @@ namespace Blog.Core.Controllers
/// <param name="roleModulePermissionServices"></param>
/// <param name="user"></param>
/// <param name="passwordLibServices"></param>
/// <param name="blogApi"></param>
/// <param name="doubanApi"></param>
/// <param name="httpPollyHelper"></param>
/// <param name="seqOptions"></param>
public ValuesController(IBlogArticleServices blogArticleServices
, IMapper mapper
, IAdvertisementServices advertisementServices
, Love love
, IRoleModulePermissionServices roleModulePermissionServices
, IUser user, IPasswordLibServices passwordLibServices
, IBlogApi blogApi
, IDoubanApi doubanApi
, IHttpPollyHelper httpPollyHelper
, IOptions<SeqOptions> seqOptions)
{
@ -77,9 +71,6 @@ namespace Blog.Core.Controllers
_user = user;
// 测试多库
_passwordLibServices = passwordLibServices;
// 测试http请求
_blogApi = blogApi;
_doubanApi = doubanApi;
// 测试AOP加载顺序配合 return
_blogArticleServices = blogArticleServices;
// 测试redis消息队列
@ -162,11 +153,6 @@ namespace Blog.Core.Controllers
{ bsubmitter = $"laozhang{DateTime.Now.Millisecond}", IsDeleted = false, bID = 5 });
// 测试模拟异常,全局异常过滤器拦截
var i = 0;
// var d = 3 / i;
// 测试 AOP 缓存
var blogArticles = await _blogArticleServices.GetBlogs();
@ -240,7 +226,6 @@ namespace Blog.Core.Controllers
// GET api/values/5
[HttpGet("{id}")]
[AllowAnonymous]
//[TypeFilter(typeof(DeleteSubscriptionCache),Arguments =new object[] { "1"})]
[TypeFilter(typeof(UseServiceDIAttribute), Arguments = new object[] { "laozhang" })]
public ActionResult<string> Get(int id)
{
@ -351,20 +336,6 @@ namespace Blog.Core.Controllers
};
}
/// <summary>
/// 测试http请求 WebApiClient Get
/// </summary>
/// <returns></returns>
[HttpGet("WebApiClientGetAsync")]
[AllowAnonymous]
public async Task<object> WebApiClientGetAsync()
{
int id = 1;
string isbn = "9787544270878";
var doubanVideoDetail = await _doubanApi.VideoDetailAsync(isbn);
return await _blogApi.DetailNuxtNoPerAsync(id);
}
/// <summary>
/// 测试Fulent做参数校验
/// </summary>

View File

@ -1,6 +1,5 @@
using Blog.Core.IServices;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.Extensions.Logging;
namespace Blog.Core.Filter
{
@ -11,7 +10,7 @@ namespace Blog.Core.Filter
private readonly IBlogArticleServices _blogArticleServices;
private readonly string _name;
public UseServiceDIAttribute(ILogger<UseServiceDIAttribute> logger, IBlogArticleServices blogArticleServices,string Name="")
public UseServiceDIAttribute(ILogger<UseServiceDIAttribute> logger, IBlogArticleServices blogArticleServices, string Name = "")
{
_logger = logger;
_blogArticleServices = blogArticleServices;
@ -21,14 +20,16 @@ namespace Blog.Core.Filter
public override void OnActionExecuted(ActionExecutedContext context)
{
//var dd =await _blogArticleServices.Query();
var dd = _blogArticleServices.Query().Result;
_logger.LogInformation("测试自定义服务特性");
Console.WriteLine(_name);
base.OnActionExecuted(context);
DeleteSubscriptionFiles();
}
private void DeleteSubscriptionFiles()
{
}
}
}

View File

@ -62,6 +62,7 @@ JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
builder.Services.AddCacheSetup();
builder.Services.AddSqlsugarSetup();
builder.Services.AddDbSetup();
builder.Services.AddInitializationHostServiceSetup();
builder.Host.AddSerilogSetup();
@ -73,10 +74,12 @@ builder.Services.AddJobSetup();
builder.Services.AddHttpContextSetup();
builder.Services.AddAppTableConfigSetup(builder.Environment);
builder.Services.AddHttpApi();
builder.Services.AddRedisInitMqSetup();
builder.Services.AddHttpPollySetup();
builder.Services.AddNacosSetup(builder.Configuration);
builder.Services.AddInitializationHostServiceSetup();
builder.Services.AddRedisInitMqSetup();
builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);
builder.Services.AddSignalR().AddNewtonsoftJsonProtocol();
builder.Services.AddAuthorizationSetup();
if (Permissions.IsUseIds4 || Permissions.IsUseAuthing)
@ -89,14 +92,11 @@ else
builder.Services.AddAuthentication_JWTSetup();
}
builder.Services.AddIpPolicyRateLimitSetup(builder.Configuration);
builder.Services.AddSignalR().AddNewtonsoftJsonProtocol();
builder.Services.AddScoped<UseServiceDIAttribute>();
builder.Services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true)
.Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);
builder.Services.AddSession();
builder.Services.AddHttpPollySetup();
builder.Services.AddControllers(o =>
{
o.Filters.Add(typeof(GlobalExceptionsFilter));

View File

@ -37,8 +37,6 @@
<PackageReference Include="Serilog" Version="3.1.1" />
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="WebApiClient.Extensions.DependencyInjection" Version="2.0.3" />
<PackageReference Include="WebApiClient.JIT" Version="1.1.4" />
</ItemGroup>

View File

@ -1,11 +1,7 @@
using Blog.Core.Common;
using Blog.Core.Common.Helper;
using Blog.Core.Common.LogHelper;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Collections.Generic;
using System.Text;
using Blog.Core.Common.DB;
@ -16,194 +12,6 @@ namespace Blog.Core.Extensions
/// </summary>
public static class AppConfigSetup
{
public static void AddAppConfigSetup(this IServiceCollection services, IHostEnvironment env)
{
if (services == null) throw new ArgumentNullException(nameof(services));
if (AppSettings.app(new string[] { "Startup", "AppConfigAlert", "Enabled" }).ObjToBool())
{
if (env.IsDevelopment())
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Console.OutputEncoding = Encoding.GetEncoding("GB2312");
}
Console.WriteLine("************ Blog.Core Config Set *****************");
ConsoleHelper.WriteSuccessLine("Current environment: " + Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"));
// 授权策略方案
if (Permissions.IsUseIds4)
{
ConsoleHelper.WriteSuccessLine($"Current authorization scheme: " + (Permissions.IsUseIds4 ? "Ids4" : "JWT"));
}
else
{
Console.WriteLine($"Current authorization scheme: " + (Permissions.IsUseIds4 ? "Ids4" : "JWT"));
}
// 缓存AOP
if (!AppSettings.app(new string[] { "AppSettings", "CachingAOP", "Enabled" }).ObjToBool())
{
Console.WriteLine($"Caching AOP: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"Caching AOP: True");
}
// 服务日志AOP
if (!AppSettings.app(new string[] { "AppSettings", "LogAOP", "Enabled" }).ObjToBool())
{
Console.WriteLine($"Service Log AOP: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"Service Log AOP: True");
}
// 开启的中间件日志
var requestResponseLogOpen = AppSettings.app(new string[] { "Middleware", "RequestResponseLog", "Enabled" }).ObjToBool();
var ipLogOpen = AppSettings.app(new string[] { "Middleware", "IPLog", "Enabled" }).ObjToBool();
var recordAccessLogsOpen = AppSettings.app(new string[] { "Middleware", "RecordAccessLogs", "Enabled" }).ObjToBool();
ConsoleHelper.WriteSuccessLine($"OPEN Log: " +
(requestResponseLogOpen ? "RequestResponseLog √," : "") +
(ipLogOpen ? "IPLog √," : "") +
(recordAccessLogsOpen ? "RecordAccessLogs √," : "")
);
// 事务AOP
if (!AppSettings.app(new string[] { "AppSettings", "TranAOP", "Enabled" }).ObjToBool())
{
Console.WriteLine($"Transaction AOP: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"Transaction AOP: True");
}
// 审计AOP
if (!AppSettings.app(new string[] { "AppSettings", "UserAuditAOP", "Enabled" }).ObjToBool())
{
Console.WriteLine($"UserAudit AOP: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"UserAudit AOP: True");
}
// 数据库Sql执行AOP
if (!AppSettings.app(new string[] { "AppSettings", "SqlAOP", "OutToLogFile", "Enabled" }).ObjToBool())
{
Console.WriteLine($"DB Sql AOP To LogFile: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"DB Sql AOP To LogFile: True");
}
// Sql执行日志输出到控制台
if (!AppSettings.app(new string[] { "AppSettings", "SqlAOP", "OutToConsole", "Enabled" }).ObjToBool())
{
Console.WriteLine($"DB Sql AOP To Console: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"DB Sql AOP To Console: True");
}
// SingnalR发送数据
if (!AppSettings.app(new string[] { "Middleware", "SignalR", "Enabled" }).ObjToBool())
{
Console.WriteLine($"SignalR send data: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"SignalR send data: True");
}
// IP限流
if (!AppSettings.app("Middleware", "IpRateLimit", "Enabled").ObjToBool())
{
Console.WriteLine($"IpRateLimiting: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"IpRateLimiting: True");
}
// 性能分析
if (!AppSettings.app("Startup", "MiniProfiler", "Enabled").ObjToBool())
{
Console.WriteLine($"MiniProfiler: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"MiniProfiler: True");
}
// CORS跨域
if (!AppSettings.app("Startup", "Cors", "EnableAllIPs").ObjToBool())
{
Console.WriteLine($"EnableAllIPs For CORS: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"EnableAllIPs For CORS: True");
}
// redis消息队列
if (!AppSettings.app("Startup", "RedisMq", "Enabled").ObjToBool())
{
Console.WriteLine($"Redis MQ: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"Redis MQ: True");
}
// RabbitMQ 消息队列
if (!AppSettings.app("RabbitMQ", "Enabled").ObjToBool())
{
Console.WriteLine($"RabbitMQ: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"RabbitMQ: True");
}
// Consul 注册服务
if (!AppSettings.app("Middleware", "Consul", "Enabled").ObjToBool())
{
Console.WriteLine($"Consul service: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"Consul service: True");
}
// EventBus 事件总线
if (!AppSettings.app("EventBus", "Enabled").ObjToBool())
{
Console.WriteLine($"EventBus: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"EventBus: True");
}
// 读写分离
if (!BaseDBConfig.MainConfig.SlaveConnectionConfigs.AnyNoException())
{
Console.WriteLine($"Is CQRS: False");
}
else
{
ConsoleHelper.WriteSuccessLine($"Is CQRS: True");
}
Console.WriteLine();
}
}
public static void AddAppTableConfigSetup(this IServiceCollection services, IHostEnvironment env)
{
if (services == null) throw new ArgumentNullException(nameof(services));

View File

@ -4,8 +4,6 @@ using Microsoft.Extensions.DependencyInjection;
using Polly;
using Polly.Extensions.Http;
using Polly.Timeout;
using System;
using System.Net.Http;
namespace Blog.Core.Extensions
{

View File

@ -2,7 +2,6 @@
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
namespace Blog.Core.Extensions
{

View File

@ -1,33 +0,0 @@
using Microsoft.Extensions.DependencyInjection;
using System;
using WebApiClient.Extensions.DependencyInjection;
using Blog.Core.Common.WebApiClients.HttpApis;
namespace Blog.Core.Extensions
{
/// <summary>
/// WebApiClientSetup 启动服务
/// </summary>
public static class WebApiClientSetup
{
/// <summary>
/// 注册WebApiClient接口
/// </summary>
/// <param name="services"></param>
public static void AddHttpApi(this IServiceCollection services)
{
if (services == null) throw new ArgumentNullException(nameof(services));
services.AddHttpApi<IBlogApi>().ConfigureHttpApiConfig(c =>
{
c.HttpHost = new Uri("http://apk.neters.club/");
c.FormatOptions.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
});
services.AddHttpApi<IDoubanApi>().ConfigureHttpApiConfig(c =>
{
c.HttpHost = new Uri("http://api.xiaomafeixiang.com/");
c.FormatOptions.DateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff";
});
}
}
}

View File

@ -1,96 +0,0 @@
namespace Blog.Core.Common.WebApiClients.HttpApis
{
public class Data
{
/// <summary>
///
/// </summary>
public string isbn { get; set; }
/// <summary>
/// 解忧杂货店
/// </summary>
public string title { get; set; }
/// <summary>
/// ナミヤ雑貨店の奇蹟
/// </summary>
public string origintitle { get; set; }
/// <summary>
///
/// </summary>
public string subtitle { get; set; }
/// <summary>
///
/// </summary>
public string image { get; set; }
/// <summary>
/// [日]东野圭吾
/// </summary>
public string author { get; set; }
/// <summary>
/// 李盈春
/// </summary>
public string translator { get; set; }
/// <summary>
/// 南海出版公司
/// </summary>
public string publisher { get; set; }
/// <summary>
///
/// </summary>
public string pubdate { get; set; }
/// <summary>
/// <东野圭吾><治愈><温暖><小说><日本><日本文学><東野圭吾><推理>
/// </summary>
public string tags { get; set; }
/// <summary>
///
/// </summary>
public string kaiben { get; set; }
/// <summary>
///
/// </summary>
public string zhizhang { get; set; }
/// <summary>
/// 精装
/// </summary>
public string binding { get; set; }
/// <summary>
///
/// </summary>
public string taozhuang { get; set; }
/// <summary>
/// 新经典文库·东野圭吾作品
/// </summary>
public string series { get; set; }
/// <summary>
///
/// </summary>
public string pages { get; set; }
/// <summary>
/// 39.50元
/// </summary>
public string price { get; set; }
public string author_intro { get; set; }
public string summary { get; set; }
public string catalog { get; set; }
}
public class DoubanViewModel
{
/// <summary>
///
/// </summary>
public string status { get; set; }
/// <summary>
///
/// </summary>
public Data data { get; set; }
/// <summary>
/// 获取图书数据成功
/// </summary>
public string msg { get; set; }
}
}

View File

@ -1,22 +0,0 @@
using WebApiClient;
using WebApiClient.Attributes;
namespace Blog.Core.Common.WebApiClients.HttpApis
{
/// <summary>
/// 豆瓣视频管理
/// </summary>
[TraceFilter]
public interface IDoubanApi : IHttpApi
{
/// <summary>
/// 获取电影详情
/// </summary>
/// <param name="isbn"></param>
[HttpGet("api/bookinfo")]
ITask<DoubanViewModel> VideoDetailAsync(string isbn);
}
}

View File

@ -1,84 +0,0 @@
using Blog.Core.Model;
using Blog.Core.Model.Models;
using Blog.Core.Model.ViewModels;
using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using WebApiClient;
using WebApiClient.Attributes;
namespace Blog.Core.Common.WebApiClients.HttpApis
{
/// <summary>
/// 博客管理
/// </summary>
[TraceFilter]
public interface IBlogApi : IHttpApi
{
/// <summary>
/// 获取博客列表【无权限】
/// </summary>
/// <param name="id"></param>
/// <param name="page"></param>
/// <param name="bcategory"></param>
/// <param name="key"></param>
/// <returns>Success</returns>
[HttpGet("api/Blog")]
Task<MessageModel<PageModel<BlogArticle>>> BlogAsync(int? id, int page, string bcategory, string key);
/// <summary>
/// 添加博客【无权限】
/// </summary>
/// <param name="body"></param>
/// <returns>Success</returns>
[HttpPost("api/Blog")]
Task<MessageModel<string>> Blog2Async([JsonContent] BlogArticle body);
/// <summary>
/// 获取博客详情 (Auth)
/// </summary>
/// <param name="id"></param>
/// <returns>Success</returns>
[HttpGet("api/Blog/{id}")]
Task<MessageModel<BlogViewModels>> Blog3Async([Required] int id);
/// <summary>
/// apache jemeter 压力测试
/// 更新接口
/// </summary>
/// <returns>Success</returns>
[HttpGet("api/Blog/ApacheTestUpdate")]
Task<MessageModel<bool>> ApacheTestUpdateAsync();
/// <summary>
/// 删除博客 (Auth policies: Permission)
/// </summary>
/// <param name="id"></param>
/// <returns>Success</returns>
[HttpDelete("api/Blog/Delete")]
Task<MessageModel<string>> DeleteAsync(int? id);
/// <summary>
/// 获取详情【无权限】
/// </summary>
/// <param name="id"></param>
/// <returns>Success</returns>
[HttpGet("api/Blog/DetailNuxtNoPer")]
Task<MessageModel<BlogViewModels>> DetailNuxtNoPerAsync(int? id);
/// <summary>
/// 更新博客信息 (Auth)
/// </summary>
/// <param name="body"></param>
/// <returns>Success</returns>
[HttpPut("api/Blog/Update")]
Task<MessageModel<string>> UpdateAsync([JsonContent] BlogArticle body);
/// <summary>
/// 获取博客测试信息 v2版本
/// </summary>
/// <returns>Success</returns>
[HttpGet("api/V2/Blog/Blogtest")]
Task<MessageModel<string>> BlogtestAsync();
}
}