Обновление ядра 2.2 для asp.net и HttpSessionState недоступны в библиотеках классов - PullRequest
0 голосов
/ 25 декабря 2018

Поскольку я унаследовал проект, который мне нужно обновить до .net core 2.2, у меня возникли проблемы с несколькими зависимостями.

Здесь я пропускаю HttpSessionState

private static string CollectionToHtmlTable(HttpSessionState collection)
    {
        // Converts HttpSessionState to NameValueCollection
        var nvc = new NameValueCollection();
        foreach (string item in collection)
        {
            nvc.Add(item, collection[item].ToString());
        }

        return CollectionToHtmlTable(nvc);
    }

Чтонесколько хороших примеров кода, как я могу получить доступ к HttpSessionState в библиотеке классов ядра .net?

1 Ответ

0 голосов
/ 25 декабря 2018

Пакет Microsoft.AspNetCore.Session, включенный в метапакет Microsoft.AspNetCore.App, предоставляет промежуточное программное обеспечение для управления состоянием сеанса.Чтобы включить промежуточное программное обеспечение сеанса, автозагрузка должна содержать:

  1. Любой из кэшей памяти IDistributedCache.Реализация IDistributedCache используется в качестве резервного хранилища для сеанса.
  2. Вызов AddSession в ConfigureServices.
  3. Вызов UseSession в Configure.

Код:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            // Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
        });

        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseSession();
        app.UseHttpContextItemsMiddleware();
        app.UseMvc();
    }
}

HttpContext.Session доступен после настройки состояния сеанса.

HttpContext.Session недоступен до UseSession был вызван.

InvalidOperationException исключение возникает, когда UseSession вызывается после UseMvc.

Доступ к состоянию сеанса осуществляется из класса PageModel Razor Pages или класса контроллера MVC с помощью HttpContext.Session.Это свойство является реализацией ISession.

Реализация ISession предоставляет несколько методов расширения для установки и получения целочисленных и строковых значений.Методы расширения находятся в пространстве имен Microsoft.AspNetCore.Http (добавьте оператор

using Microsoft.AspNetCore.Http;

для получения доступа к методам расширения), когда проект ссылается на пакет Microsoft.AspNetCore.Http.Extensions.

Доступ к Httpcontext в библиотеке классов:

HttpContext доступен в контроллерах, но для доступа к другим классам вам необходимо ввести IHttpContextAccessor в вашем классе.Для доступа к сеансу используйте следующий код: -

var sessionValue =_context.HttpContext.Session.GetString("KeyName");

Более подробную информацию можно найти по адресу: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...