Когда эта строка кода, 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?}");
});
}
}