我创建了一个资源过滤器,以在.net core 2.2上记录发布请求的正文, 但我面临一个非常奇怪的问题,因为在每次请求时他都被两次叫过。
我查看了提琴手,以确保单个请求已发送到服务器。
下面,我在Mvc管道上提供了筛选器和注册表的代码,并在启动时提供了configure方法。
提前,如果我错过了一些信息,请告诉我。
过滤器注册表:
services.AddMvc(options =>
{
options.Filters.Add(options.Filters.Add(typeof(ApiPostLogFilter)));
}).SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_2_2)
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
资源过滤器代码:
public class ApiPostLogFilter : IAsyncResourceFilter
{
ApiRequestLogService _apiRequestLogService;
public ApiPostLogFilter(ApiRequestLogService ApiRequestLogService)
{
_apiRequestLogService = ApiRequestLogService;
}
public async Task OnResourceExecutionAsync(ResourceExecutingContext context, ResourceExecutionDelegate next)
{
await ApiPostRequestLogHelper.LogPostRequest(context.HttpContext, _apiRequestLogService);
await next.Invoke();
}
}
配置方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseMiddleware<ExceptionMiddleware>();
}
//Config para que não haja timeout no Redis.
ThreadPool.SetMinThreads(1000, 1000);
app.UseEndpointRouting();
app.UseMiddleware<TenantIdentifierStartupMiddleware>();
app.UseMiddleware<MiniProfilerMiddleware>();
app.UseMvc();
}
答案 0 :(得分:0)
发生这种情况是因为您两次添加了过滤器。
更改:
options.Filters.Add(options.Filters.Add(typeof(ApiPostLogFilter)));
至:
options.Filters.Add(typeof(ApiPostLogFilter));