2016-06-26 3 views
2

Я пытаюсь использовать Microsoft.AspNetCore.Routing с несколькими widdlewares, которые могут совпадать. Например:Настроить прогон основного маршрутизатора ASP.NET на несколько промежуточных серверов

builder.MapRoute ("API", асинхронном с => {}) // Match все апи называет

builder.MapRoute ("апи/пользователь", асинхронная с => {})// только апи/пользователь

builder.MapRoute ("апи/клиент", асинхронная с => {}) // только апи/клиент

Но в настоящее время только один из них не может сравниться.

Если я сделаю MapRoute («апи/{*} постфикса», обработчик), то только этот обработчик будет работать и апи/клиент и апи/пользователь не будет.

Есть ли способ обработки нескольких совпадений?

ответ

4

Сначала попробуйте зарегистрировать общее промежуточное программное обеспечение, например. используя .MapWhen(...), и внутри этого промежуточного ПО положите ваши дочерние средние .MapRoute(..). Порядок, в котором вы зарегистрировать промежуточное программное имеет значение, а также вы должны понимать, как «разветвление» работает:

https://docs.asp.net/en/latest/fundamentals/middleware.html

В дополнение к пути на основе сопоставления, метод MapWhen поддерживает предикат на основе промежуточного программного разветвление , позволяя строить отдельные трубопроводы очень гибким образом. Любой предикат типа Func может использоваться для сопоставления запросов к новой ветви конвейера.

Проверьте это видео, которое объясняет концепцию:

The basics of middleware in ASP.NET Core