Почему пользовательская позиция использования промежуточного программного обеспечения влияет на его вызов? - PullRequest
0 голосов
/ 29 мая 2020

Почему это работает так, как ожидалось:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRequestTimeoutMiddleware();
        app.UseExceptionHandlingMiddleware();

        app.UseHttpsRedirection();

        app.UseRouting();

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

, но это не работает:

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseHttpsRedirection();

        app.UseRouting();

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

        app.UseRequestTimeoutMiddleware();
        app.UseExceptionHandlingMiddleware();
    }

Во втором случае InvokeAsync никогда не вызывается, это то, что я значит не работает.

1 Ответ

1 голос
/ 29 мая 2020

Это связано со способом ASP. NET Работает заказ основного промежуточного ПО. У Microsoft есть отличная документация здесь относительно упорядочивания промежуточного программного обеспечения, но для изменения этих документов я скопирую часть ее сюда.

Ознакомьтесь с порядком выполнения промежуточного программного обеспечения ниже: enter image description here

Вы можете увидеть порядок, в котором ASP. NET Core выполняется через конвейер промежуточного программного обеспечения, при этом маршрутизация конечных точек является последним элементом в порядке выполнения. Помещая свое собственное промежуточное ПО после маршрутизации конечной точки, оно по существу замыкается в этой точке и никогда не попадает (при обратном прохождении цепочки выполнения).

Из приведенной выше ссылки в документации указано:

Порядок критически важен для безопасности, производительности и функциональности.

Из-за любви одних и ненависти к другим эта договоренность - своего рода попался когда дело доходит до ожидаемого поведения.

...