Комментарии 6
Костыли типа переписывания еndpoint на свой (после того, как Endpoint Routing отработал) почему-то не взлетели.
Так ведь Endpoint Routing уже отработал...
Selectors отвечают за роутинг, и я честно не смог найти, почему это — коллекция.
Потому что один контроллер может быть доступен по нескольким маршрутам.
Биндер — не совсем нормальный сервис. Предполагается, что мы должны регистрировать его через binder provider, но тогда он будет конфликтовать с существующими. Поэтому придется резолвить зависимости вручную
А что мешает перечислить их в конструкторе? Вроде же BinderTypeModelBinder, который и создаёт ваш биндер, создаёт его через ObjectFactory, которая умеет резолвить зависимости...
Сериализация
Тут у вас что-то страшное написано. Можно же сериализовать/десериализовать "шапку" самому через JsonTextWriter/JsonTextReader, а основному сериализатору оставить параметры.
Так ведь Endpoint Routing уже отработал.
имелось в виду решение, когда ER определил какой нужен endpoint и прописал его куда-то в HttpContextFeature, а мы берем и подменяем на свой. Видел такую статью и демо, но что-то не срослось, возможно потому что на 2.2. ER реализован как-то не так, как в 3.1
Потому что один контроллер может быть доступен по нескольким маршрутам
Действительно, спасибо! *facepalm*
BinderTypeModelBinder
Зарегать его в DI напрямую — не рабоает. Вероятно, я не нашел, как именно создается биндер, уже не помню. Статьи, которые попадались мне, юзали Request Services из контекста.
А про сериализацию честно говоря не придумал как можно было бы проще. Ну, разве что руками ползать по json-у, но это я считаю идейно неправильным, поэтому использовал newtonsoft json converters везде где только можно)
Довольно много ресурсов командой уже потрачено на то, чтобы разобраться, какой из способов больше нам подходит. А ведь еще нужно поддерживать единообразие. Чтобы никто не сходил с ума, читая код сервиса, который написан коллегой полгода назад.
Ура! Я не один кто этим заморачивается. А вообще реально крутая штука получилась.
В своём велосипеде я разбираю batch и отдельные запросы отправляю в нужный контроллер через IActionInvoker
Интересная штука! Рискну предположить что middlewares она уже не вызывает, а фильтры? [Authorize] например
IActionInvoker вызывает InvokeFilterPipelineAsync который вызывает IAuthorizationFilter.
Учим ASP.NET Core новым трюкам на примере Json Rpc 2.0