Как правильно реализовать Использовать метод расширения на IAppBuilder - PullRequest
0 голосов
/ 24 апреля 2020

Метод расширения «Use» в приложении IAppBuilder имеет следующую подпись - public static IApplicationBuilder Use(this IApplicationBuilder app, Func<HttpContext, Func<Task>, Task> middleware) Это означает, что он принимает делегат Fun c, который принимает первый аргумент в качестве объекта контекста, второй - асинхронное лямбда-выражение и возвращает задача. В официальном документе говорится, что Fun c должен быть делегатом запроса (следующий), и мы ожидаем, что в текущем вызове делегата будет вызван другой компонент промежуточного программного обеспечения. Я сделал что-то вроде этого.

app.Use(async (context, temp) =>
{
    await temp();
});

app.UseEndpoints(endpoints =>
{
    endpoints.MapGet("/", async context =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
});

, где temp =

public Func<Task> temp = async () =>
{
    Debug.WriteLine("In temporary task method");
    await Task.Delay(1000);
};

и практически ничего не делает, чем спать в течение 1 секунды. Я также не называю следующую часть промежуточного программного обеспечения, которая записывает ответ.

Я ожидал, что этот код взломает sh, но он отправил ответ Hello World.

Вопрос - как вызывался следующий кусок промежуточного программного обеспечения, если он не был явно вызван во временном делегате, который я передал? Обычно мы передаем next, который является делегатом запроса, принимающим следующий кусок промежуточного программного обеспечения, и делаем await next (); явно вызывать следующее в цепочке.

Я понимаю, что что-то упускаю из концепции того, как эти промежуточные программы работают на практике.

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