Я согласен с ответом выше, вы хотите, чтобы библиотеки netstandard были простыми и без веб-запросов, если это возможно. Существует пакет nuget System.Net.Http, предназначенный для стандарта .net. Это может быть использовано при обновлении 4.6.x для полного фреймворка и для ядра .net, если вы создаете библиотеку и не хотите загружать ядро ​​asp.net.

отаю над парой проектов, один из которыхASP.NET 4.5 приложение и другой.Net Core API 1.1 проект. Приложение asp.net используетHttpContext классы для чтения файлов cookie и заголовков страниц. Теперь мне нужно переместить это в стандартную библиотеку .net, которая может использоваться обоими проектами. Я не нахожу HttpContext в стандартном SDK .net. Какие-либо предложения?

 Amy17 нояб. 2017 г., 20:14
 Camilo Terevinto17 нояб. 2017 г., 20:19
Не следует смешивать проекты .NET и .NET Core, они не работают в одной среде.
 Aluan Haddad17 нояб. 2017 г., 20:29
Нужно ли общему коду получать доступ к этой статике? Вы можете извлечь эту логику?

Ответы на вопрос(5)

.NET Standard - самая простая реализация .NET, означающая, что реализованы только базовые функции, независимые от платформы и сценариев.
HttpContext существует как в .NET Framework, так и в .NET Core (оба из которых, между прочим, реализуют .NET Standard), но, специфично для Web, не существует в .NET Standard

Итак, у вас есть три варианта:

Таргетинг на .NET Framework и использованиеSystem.Web.HttpContextTarget .NET Core и использованиеMicrosoft.AspNetCore.Http.HttpContextПереместить логику, которая используетHttpContext от проекта .NET Standard

Заметьте, однако, что эти классы сильно различаются. Версия .NET Core была создана для ASP.NET Core, которая сильно отличается от ASP.NET 4.5 и более ранних версий.

HttpContext в веб-проекте. Это на самом деле тесно связано, так как ВЫ хотите иметь возможность повторно использовать код, и, следовательно, библиотека классов в ядре .net ИЛИ в стандарте .net ДОЛЖНА быть в состоянии использоватьHttpContext

Итак, в .NET Standard вы хотите добавить:

Microsoft.AspNetCore.Http.Abstractions

К сожалению, так много нового в новом HttpContextHttpContext.Current отсутствует и, следовательно, сеанс и запрос и т. д.

(Да, я получаю шаблоны проектирования и зачем выделять их и делать более тестируемыми)

Вот небольшой трюк, который вы можете осуществить, чтобы получитьCurrent

namespace System.Web
{
    public static class HttpContext
        {
            private static Microsoft.AspNetCore.Http.IHttpContextAccessor m_httpContextAccessor;


    public static void Configure(Microsoft.AspNetCore.Http.IHttpContextAccessor httpContextAccessor)
        {
            m_httpContextAccessor = httpContextAccessor;
        }


        public static Microsoft.AspNetCore.Http.HttpContext Current
        {
            get
            {
                return m_httpContextAccessor.HttpContext;
            }
        }

    }
}

вы хотите, чтобы библиотеки netstandard были простыми и без веб-запросов, если это возможно. Существует пакет nuget System.Net.Http, предназначенный для стандарта .net. Это может быть использовано при обновлении 4.6.x для полного фреймворка и для ядра .net, если вы создаете библиотеку и не хотите загружать ядро ​​asp.net.

Можно работать сHttpContext.

Хотя это не входит в.NET Standard библиотека,Microsoft.AspNetCore.Http.Abstractions пакет (который предназначен для .NET Standard 2.0) позволит вам работать сHttpContext.

 Justin11 янв. 2019 г., 17:39
В этом HttpContext доступны только методы Equals и ReferenceEquals, нет свойств для доступа к среде выполнения. Чего мне не хватает?
 House of Dexter05 нояб. 2018 г., 21:47
потому что это не тот же HttpContext. (Я не понизил вас)
 pimbrouwers29 июн. 2018 г., 20:41
Почему отрицательный голос?

в стандартную библиотеку .NET, которая может использоваться обоими проектами ...

Не делай это.

Предположим, вы выполняете операцию X с данными, которые вы читаете из файлов cookie. Вы можете переместить эту операцию X в библиотеку. Работа проектов ASP.NET заключается в обработке конвейера запросов. Чтение куки принадлежит там.

Ваш ответ на вопрос