Статический класс / значения доступны только для текущего соединения / пользователя - PullRequest
0 голосов
/ 20 октября 2019

У меня есть ядро ​​Asp.NET 2. Я использую статический класс для хранения некоторой информации о текущем пользователе (доступной во всех контроллерах и т. Д.), Но мне кажется, что иногда статические значения от пользователя видныКак сделать статические значения доступными только для текущего подключения / пользователя?

  public static class globalVariables
    {

        public static string Value1;

        public static string getUserValue1()..
        {
           ....
        }
......

Я использую его таким образом:

globalVariables.getUserValue1(..)

спасибо

1 Ответ

1 голос
/ 21 октября 2019

Кажется, проблема решена с помощью сессий, благодаря Хенку, а также информации из этой ссылки :

Откройте файл startup.cs и добавьте строки AddSession () и AddDistributedMemoryCache () вConfigureServices (IServiceCollection services)

// Add MVC services to the services container.
services.AddMvc();
services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of IDistributedCache
services.AddSession();

Далее мы скажем ASP.NET Core использовать кэш памяти для хранения данных сеанса. Добавьте приведенный ниже вызов UseSession () в Configure (приложение IApplicationBulider, ...)

// IMPORTANT: This session call MUST go before UseMvc()
app.UseSession();

// Add MVC to the request pipeline.
app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

Куда пропала переменная Session? Расслабьтесь, он все еще там, но не там, где вы думаете. Теперь вы можете найти объект сеанса с помощью HttpContext.Session. HttpContext - это просто текущий HttpContext, предоставляемый вам классом Controller.

Если вы не находитесь в контроллере, вы все равно можете получить доступ к HttpContext, внедрив IHttpContextAccessor.

Давайте продолжим и добавимсеансы с нашим домашним контроллером:

using Microsoft.AspNetCore.Http; // Needed for the SetString and GetString extension methods

public class HomeController : Controller
{
    public IActionResult Index()
    { 
        HttpContext.Session.SetString("Test", "Ben Rules!");
        return View();
    }

    public IActionResult About()
    {
        ViewBag.Message = HttpContext.Session.GetString("Test");

        return View();
    }
}

Вы увидите методы Index () и About (), использующие объект Session. Здесь это довольно просто, просто используйте один из методов Set () для хранения ваших данных и один из методов Get () для их извлечения.

Просто ради интереса, давайте вставим контекст в случайный класс:

public class SomeOtherClass
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    private ISession _session => _httpContextAccessor.HttpContext.Session;

    public SomeOtherClass(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void TestSet()
    {
        _session.SetString("Test", "Ben Rules!");
    }

    public void TestGet()
    {
        var message = _session.GetString("Test");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...