Можем ли мы вернуться в конвейер промежуточного программного обеспечения ядра .net - PullRequest
0 голосов
/ 30 июня 2018

У меня вопрос, можем ли мы вернуться к промежуточному конвейеру, давайте рассмотрим пример

у нас промежуточное программное обеспечение1, промежуточное программное обеспечение2, промежуточное программное обеспечение3 и промежуточное программное обеспечение3 выполняется. Я хочу, чтобы middleware1 снова запустился, а затем вернулся обратно к middleware3, можем ли мы это сделать?

Спасибо заранее

1 Ответ

0 голосов
/ 30 июня 2018

Нет, вы не можете этого сделать. Промежуточное программное обеспечение вызывается в конвейере. Это означает, что есть одно промежуточное программное обеспечение, которое запустится и перейдет к следующему промежуточному программному обеспечению в конвейере, которое затем перейдет к следующему и так далее. В конце концов, каждое промежуточное ПО имеет способ сделать что-то после по завершении конвейера.

Это обычно выглядит так:

Request
|            → Middleware1
|              | run
|              | next()     → Middleware2
|              |              | run
|              |              | next()     → Middleware3
|              |              |              | run
|              |              |              | next()     → {}
|              |              |              | run after
|              |              |              | return ↵
|              |              | ←
|              |              | run after
|              |              | return ↵
|              | ←
|              | run after
|              | return ↵
| ←
| ⇒ Send response

Так как это строгий конвейер, который идет только в одном направлении, вы не можете случайно прыгать вокруг. У вас есть только шанс вызвать следующее промежуточное ПО в конвейере или вернуться.

Однако, что вы можете сделать, это вызвать следующий конвейер несколько раз. Например, промежуточное программное обеспечение StatusCodePages делает это для повторного выполнения конвейера для кодовой страницы состояния при возникновении ошибки:

Request
|            → StatusCodePagesMiddleware
|              | run
|              | next()     → Pipeline
|              |              | … throw an error
|              | ← catch exception
|              | run after
|              | adjust parameters
|              | next()     → Run pipeline again with modified parameters do display error page
|              | return ↵
| ←
| ⇒ Send response

Обратите внимание, что это очень особенная вещь, которая работает только потому, что промежуточное ПО StatusCodePages обычно регистрируется очень рано и потому, что оно хочет перезапустить полный конвейер .

Если вы хотите более точный контроль над этим, скорее всего, вам не следует даже разбивать свою логику на несколько промежуточных программ. Возможно, было бы лучше иметь единственное промежуточное программное обеспечение, внутри которого была бы очень контролируемая логика. Эта логика может быть, например, другим конвейером или просто прямым потоком управления.

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