尚未为此应用或请求配置会话

时间:2019-02-18 12:20:53

标签: c# session asp.net-core asp.net-core-2.1

当这行代码System.Web.HttpContext.Current.Session.SetString()要运行时,出现此错误:

  

尚未为此应用程序或请求配置会话

我已经将Microsoft.AspNetCore.Session软件包添加到了项目中。 我该如何解决这个问题?

该项目由ASP.NET Core 2

开发

(我已经查看过this question,但对我没有帮助!)

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;
    }
}

Startup类的一部分:

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

0 个答案:

没有答案