Постоянный прием HEAD-запросов в ядре промежуточного программного обеспечения asp net - PullRequest
0 голосов
/ 22 января 2020

Я использую asp net core 3.0 для моего проекта WEB API. Я создал промежуточное программное обеспечение. В промежуточном программном обеспечении я сталкиваюсь со странной проблемой. Когда я сохранил точку отладки в InvokeAsyn c (), я заметил, что InvokeAsyn c () вызывается автоматически и непрерывно. При дальнейшей отладке я обнаружил, что запрос HEAD вызывается автоматически и вызывает функцию InvokeAsyn c (). Предположим, что URL для моего проекта: http://localhost: 5000 / , тогда я получаю непрерывные запросы на http://localhost: 5000 / методом HEAD.

Промежуточное программное обеспечение

public class ErrorHandlerMiddleware
{
    private readonly RequestDelegate _next;

    public ErrorHandlerMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        try
        {
            await _next(context);
        }
        catch (Exception exception)
        {
            await HandleErrorAsync(context, exception);
        }
    }

    private static Task HandleErrorAsync(HttpContext context, Exception exception)
    {
        var response = new { message = exception.Message };
        var payload = JsonConvert.SerializeObject(response);
        context.Response.ContentType = "application/json";
        context.Response.StatusCode = 400;

        return context.Response.WriteAsync(payload);
    }
}

Startup.cs (только упоминание Configure ())

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
    {
        //app.UseCors(x => x.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());



        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMiddleware<ErrorHandlerMiddleware>();



        // Enable middleware to serve generated Swagger as a JSON endpoint.
        app.UseSwagger();

        // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
        // specifying the Swagger JSON endpoint.
        app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("../swagger/v1/swagger.json", "My API V1");
        });


        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseCors("CorsPolicy");

        app.UseHttpsRedirection();


        app.UseAuthentication();

        app.UseAuthorization();



        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });

        //Configuring serilog
        loggerFactory.AddSerilog();

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...