Я хотел бы унаследовать от 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).
У меня есть два вопроса:
Поскольку StaticFileMiddleware .Invoke () не был помечен как «виртуальный», я предполагаю, что эта процедура на самом деле не предназначена. Но все же я не понимаю, почему - чисто технически - эта процедура не работает. Поскольку я использую модификатор «new» для явного скрытия метода Invoke () базового класса (StaticFileMiddleware), не должно быть только одного, но не «Multiple publi c 'Invoke' или« InvokeAsyn c 'методов » ?
Каков "предполагаемый" способ расширения существующего промежуточного программного обеспечения соответственно? Должен ли я просто "новый StaticFileMiddleware" в моем коде? Как я могу внедрить StaticFileMiddleware в MyStaticFileMiddleware, чтобы воспользоваться преимуществом внедрения зависимостей в этом случае?
Большое спасибо за вашу помощь!