Сессия не была настроена для этого приложения или запроса - PullRequest
0 голосов
/ 18 февраля 2019

Когда эта строка кода, System.Web.HttpContext.Current.Session.SetString(), хочет запустить, я получаю эту ошибку:

Сессия не была настроена для этого приложения или запроса

Я уже добавил пакет Microsoft.AspNetCore.Session в проект.Как я могу решить эту проблему?

Проект разработан ASP.NET Core 2

(я уже рассмотрел этот вопрос , но он мне не помог!)

public static class ExceptionMiddlewareExtensions
{
    public static void ConfigureExceptionHandler(this IApplicationBuilder app, ILoggerManager logger)
    {
        app.UseExceptionHandler(appError =>
        {
            appError.Run(async context =>
            {
                // some codes

                var contextFeature = context.Features.Get<IExceptionHandlerFeature>();
                if (contextFeature != null)
                {
                   // some codes

                   // ???"Session has not been configured for this application or request."
                    System.Web.HttpContext.Current.Session.SetString(RequestId, contextFeature.Error.Message.ToString());


                   context.Response.Redirect($"/Home/Error?requestId= {RequestId}&timeOfError={timeOfError}");
                }
            });
        });
    }
}

Класс HttpContext:

namespace System.Web
{
   public static class HttpContext
   {
       private static IHttpContextAccessor _contextAccessor;
       public static Microsoft.AspNetCore.Http.HttpContext Current => _contextAccessor.HttpContext;
       internal static void Configure(IHttpContextAccessor contextAccessor)
       {
           _contextAccessor = contextAccessor;
       }
    }
}

StaticHttpContextExtensions класс:

public static class StaticHttpContextExtensions
{
    public static void AddHttpContextAccessor(this IServiceCollection services)
    {
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    }

    public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
    {
        var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
        System.Web.HttpContext.Configure(httpContextAccessor);
        return app;
    }
}

Aчасть класса запуска:

public class Startup
{
    // some codes
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpContextAccessor(); // Accessing HttpContext outside of framework components in ASP.NET Core
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); 

services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 
        // some codes
        services.AddMvc();
        services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of IDistributedCache+
        services.AddSession();  
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerManager logger, IServiceProvider svp)
    {
        app.UseStaticHttpContext(); // Accessing HttpContext outside of framework components in ASP.NET Core

        app.UseSession();   // 
        // some codes
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

Session

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