.NetCore管道-每个请求两次调用资源过滤器

时间:2019-07-08 15:08:18

标签: c# .net asp.net-core-mvc

我创建了一个资源过滤器,以在.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();
        }

1 个答案:

答案 0 :(得分:0)

发生这种情况是因为您两次添加了过滤器。

更改:

options.Filters.Add(options.Filters.Add(typeof(ApiPostLogFilter)));

至:

options.Filters.Add(typeof(ApiPostLogFilter));