Как app.usewelcomepage вызовет следующее промежуточное программное обеспечение app.run, если путь не будет удовлетворен?Я предположил, что мы всегда нуждались в await.next ()?
Да, нам нужен await next()
. Но await next()
уже добавлено в WelcomePageMiddleware
.Для получения дополнительной информации см. Исходный код WelcomePageMiddleware
.И app.UseWelcomePage(...)
здесь - не более чем метод расширения, который в конечном итоге вызывает промежуточное ПО:
return app.UseMiddleware<WelcomePageMiddleware>(Options.Create(options));
Ответственность за вызов next
лежит на промежуточном ПО, а не на методе расширения.
Как примечание, как правило, существует 4 вида промежуточного программного обеспечения:
- raw style:
next => context => { /* ... */ }
- inline-style:
(context,next)=>{ /* ... */ })
- промежуточное программное обеспечение на фабрике: класс, унаследованный от интерфейса
IMiddleware
. - промежуточное ПО по соглашению: класс без интерфейса.
Внутри этих промежуточных программ, мы вызываем await next()
или await next(context)
для вызова следующего промежуточного программного обеспечения.При использовании с 1-м стилем, 3-м стилем и 4-м стилем промежуточного программного обеспечения мы должны использовать await next(context)
вместо await next()
.
с приведенным ниже кодом, поскольку я закомментировалawait.next () в первом Middleware, где я запускаю IISExpress, браузер загружается и думает о том, что делать.На вкладке для заголовка кратко отображается заголовок из UseWelcomePage.Как это возможно, если нет ссылки?
Не уверен, что вы имеете в виду "если ссылки нет".Однако, если вы прокомментируете строку await next(context)
в первом промежуточном программном обеспечении, второе и третье промежуточное программное обеспечение никогда не получат изменения для обработки запроса.Если вы уже отобразили WelcomePage в вашем браузере до того, как закомментировали await next(context)
, а затем закомментировали первый await next(context)
, браузер зависнет на несколько секунд без изменения названия, но если вы будете ждать достаточно времени, выВы получите что-то вроде <title>Can't reach this page</title>
или пустой заголовок.