2016-06-09 8 views
1

У меня есть часть кода ASP.NET Core, которую я хочу извлечь в пользовательское промежуточное программное обеспечение. В частности, должна быть реализована следующая логика: когда запрашивается определенный путь mapPath, прокси-запрос на другой хост, идентифицированный proxyUrl.Промежуточное программное обеспечение, которое вызывает другие средние

Следующий код в Startup.cs делает трюк:

var proxyUri = new Uri(proxyUrl); 
builder.Map(
    mapPath, 
    appMapped => 
    { 
     appMapped.RunProxy(
      new ProxyOptions 
       { 
        Scheme = proxyUri.Scheme, 
        Host = proxyUri.Host, 
        Port = proxyUri.Port.ToString() 
       }); 
    } 
); 

Ну, он использует app.Map() расшириться, а затем прокси для промежуточного прокси запрос.

(Как) Можно ли извлечь эту логику в обычное и повторно используемое промежуточное ПО? Или я не могу использовать «настоящее» промежуточное ПО здесь? Я могу, конечно, написать метод расширения, например. app.UseMapProxy() и положил туда логику 1: 1, но я просто подумал, могу ли я сделать это с «настоящим» классом промежуточного слоя.

ответ

1

Этот тип установки лучше всего инкапсулирован в методе расширения IApplicationBuilder. Вы не добавляете какие-либо функции для каждого запроса за пределы существующих компонентов, просто подключая их вместе.

+0

Хорошо, вот что я имел в виду, когда я указал метод 'app.UseMapProxy()', это просто расширение. Я просто задавался вопросом, должно ли это быть «настоящим» промежуточным программным обеспечением. Спасибо за указание на это. – Matthias

+0

Еще один вопрос: как бы реализовать компонент, который добавляет реальные функции для каждого запроса, но также хочет использовать другие средние? Извлеките материал для каждого запроса в специальное промежуточное программное обеспечение и создайте его вместе с другими посредниками в расширении 'IApplicationBuilder'? – Matthias

+0

Да, это должно сработать. – Tratcher