Как расширить существующее промежуточное программное обеспечение ASP. NET ядра? - PullRequest
0 голосов
/ 21 апреля 2020

Я хотел бы унаследовать от StaticFileMiddleware («стандартный» способ обслуживания файлов stati c, инициализированный с помощью app.UseStaticFiles () в Startup.cs). Код компилируется, но когда я пытаюсь его запустить, я получаю InvalidOperationException («InvalidOperationException: доступно несколько методов publi c« Invoke »или« InvokeAsyn c ».).

Это основные части кода:

public class MyStaticFileMiddleware : StaticFileMiddleware
{
    ...
    public new async Task Invoke(HttpContext context) 
    {
        ...
        await base.Invoke(context);
        ...
    }
    ...
}

Справочная информация. Я хочу ввести значимые имена файлов для определенных файлов stati c без изменения фактических имен файлов в файловой системе (например, "tree-in-a"). -meadow.jpg "для существующего файла" 123.jpg "). Поэтому MyStaticFileMiddleware должен проверить правильность имени говорящего файла и - если он действителен - просто выполнить существующий код StaticFileMiddleware для обслуживания файла. Я бы приветствовал эту процедуру, чтобы мне не пришлось перепрограммировать основные части StaticFileMiddleware (SRP / KISS).

У меня есть два вопроса:

  1. Поскольку StaticFileMiddleware .Invoke () не был помечен как «виртуальный», я предполагаю, что эта процедура на самом деле не предназначена. Но все же я не понимаю, почему - чисто технически - эта процедура не работает. Поскольку я использую модификатор «new» для явного скрытия метода Invoke () базового класса (StaticFileMiddleware), не должно быть только одного, но не «Multiple publi c 'Invoke' или« InvokeAsyn c 'методов » ?

  2. Каков "предполагаемый" способ расширения существующего промежуточного программного обеспечения соответственно? Должен ли я просто "новый StaticFileMiddleware" в моем коде? Как я могу внедрить StaticFileMiddleware в MyStaticFileMiddleware, чтобы воспользоваться преимуществом внедрения зависимостей в этом случае?

Большое спасибо за вашу помощь!

1 Ответ

0 голосов
/ 21 апреля 2020

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

StaticFileMiddleware сам по себе является оберткой для StaticFileContext, поэтому, возможно, вам потребуется создать новую таким же образом StaticFileMiddleware sources

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