Управление нулевым сеансом ASP.NET

Я совершенно новичок в ASP.NET Core и DDD (проект, управляемый доменом). Недавно я приобрел стартовый шаблон ASP.NET Zero, чтобы облегчить процесс обучения и облегчить процесс начала работы. Мне нравится проект, но у меня проблемы с состоянием сеанса.

Я использую сторонние компоненты в нашем приложении, такие как Neodynamic продукты.

Мне нужен способ передать текущий идентификатор сеанса и протокол нескольким из этих компонентов с их соответствующих контроллеров. В ASP.NET MVC это было относительно легко с HttpContext.Session.Id и HttpContext.Request.Scheme. Это кажется немного более запутанным в ASP.NET Core.

Может ли кто-нибудь начать меня?


person Joe    schedule 15.01.2018    source источник


Ответы (2)


Пакет Microsoft.AspNetCore.Session предоставляет промежуточное ПО для управления состоянием сеанса.

Позвоните AddSession() и UseSession() в свой Startup класс:

public class Startup
{
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // Adds a default in-memory implementation of IDistributedCache.
        services.AddDistributedMemoryCache();

        services.AddSession();

        // ...
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        // ...

        app.UseSession();

        app.UseMvc(...);
    }
}

Ссылка: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?tabs=aspnetcore2x

person aaron    schedule 23.01.2018

Класс UserManager дает вам информацию о текущем пользователе.

Пример:

 public async Task<string> GetCurrentUserName()
 {
      var user = await UserManager.FindByIdAsync(AbpSession.GetUserId().ToString());
      return user.UserName;
 }

IAbpSession AbpSession также может дать вам полезную информацию, которую вы используете, наследуя от абстрактного класса ApplicationService. Interface IAbpSession определяется в Abp.dll.

Вставьте IAbpSession и UserManager в требуемый класс везде, где вы хотите получить информацию.

public class TestClass
{
    private readonly IAbpSession _abpSession;
    private readonly UserManager _userManager;

    public TestClass(
        IAbpSession abpSession,
        UserManager userManager)
    {
        _abpSession = abpSession;
        _userManager = userManager;
    }
}
person vivek nuna    schedule 15.01.2018
comment
Я могу реализовать IAbpSession, как показано выше, и он отлично работает там, где я застрял, потому что мне нужно передать абсолютный URL-адрес вместе с текущим идентификатором сеанса для обратной передачи. Вот пример использования Neodynamic WebPrintClient `public ActionResult index() { ViewData[WCPPDetectionSript] = Neodynamic.SDK.Web.WebClientPrint.CreateWcppDetectionScript( Url.Action(ProcessReqeust, WebClientPrintAPI, null, Url.ActionContext.HttpContext.Request.Scheme) , Url.ActionContext.HttpContext.Session.Id); Вернуть вид(); } ` - person Joe; 15.01.2018