Как использовать HttpContext в старом приложении веб-форм ASP.NET и новом базовом приложении ASP.NET

Я конвертирую все наши библиотеки общих классов из .NET Framework в .NET Standard, чтобы они использовались как нашей старой платформой .NET Framework, так и нашими новыми приложениями .NET Core. Цель состоит в том, чтобы перевести все наши приложения в .NET Core, но это большая система, поэтому потребуется время, поэтому нам нужно, чтобы два мира сосуществовали в течение года или около того.

Одна из проблем заключается в том, что код разделяемой библиотеки классов широко использует HttpContext. Я понимаю, что новый способ .NET Core для доступа к нему из библиотек классов заключается в использовании AddHttpContextAccessor. Однако у нас все еще есть старые приложения веб-форм ASP.NET И новые веб-приложения ASP.NET Core, которые оба должны вызывать этот общий код. Если я переключусь на использование HttpContextAccessor с DI, оно не будет работать из старого приложения ASP.NET Web Forms, поскольку оно не имеет представления о том, что такое HttpContextAccessor.

Мне интересно, какие у меня здесь варианты ... Есть ли способ настроить доступ к HttpContext, чтобы он мог использоваться как в веб-формах ASP.NET, так и в ASP.NET Core?


person Justin    schedule 01.02.2019    source источник
comment
К каким вещам вы получаете доступ из HttpContext?   -  person davidfowl    schedule 02.02.2019
comment
@davidfowl Вот все, что мы используем: gist.github.com/justintoth/44b4afe4edb4afe4a7   -  person Justin    schedule 04.02.2019
comment
Я нахожусь в одной лодке, и ответ, который я часто вижу от команды .NET и других разработчиков, - это просто переписать все свое приложение с нуля, лол, это немного раздражает.   -  person EKW    schedule 07.04.2021


Ответы (1)


Я думаю, у вас должен быть какой-то общий интерфейс между старым и новым приложениями.

Создайте новый IMyHttpContext и вставьте этот тип как в старый, так и в новый. Используйте свою инфраструктуру DI для создания нового MyClassForOld: IMyHttpContext, который обращается к базовой ссылке HttpContext для старых приложений, и используйте ваш DI для создания другого нового MyClassForNew: IMyHttpContent, который обращается к базовой ссылке на HttpContextAccessor

person Brian Ogden    schedule 01.02.2019
comment
Я не понимаю, как это будет работать на практике ... Мы используем много кода http-контекста / запроса / ответа (gist.github.com/justintoth/44b4afe4a7f065ed5675d133f8b829f4), поэтому я не понимаю, как интерфейс позволит получить доступ ко всем этим классам / методам / свойствам. - person Justin; 04.02.2019