Angularjs 为什么异步请求中的会话变量为空?

Angularjs 为什么异步请求中的会话变量为空?,angularjs,asp.net-core,session-variables,asp.net-core-3.0,Angularjs,Asp.net Core,Session Variables,Asp.net Core 3.0,我正在使用.NETCore3上的会话变量,当我发出检查这些变量的异步请求(来自angularjs)时,它们会变成空值(对于同步请求,我可以得到这些值) 这是我的设置。cs public void ConfigureServices(IServiceCollection services) { string[] origins = new string[1] { "http://angularapp" }; services.AddC

我正在使用.NETCore3上的会话变量,当我发出检查这些变量的异步请求(来自angularjs)时,它们会变成空值(对于同步请求,我可以得到这些值)

这是我的设置。cs

        public void ConfigureServices(IServiceCollection services)
        {
        string[] origins = new string[1] { "http://angularapp" };
        services.AddCors(options =>
        {
            options.AddPolicy("AllowMyOrigin",
            builder => builder.WithOrigins(origins)
                              .AllowAnyHeader()
                              .AllowCredentials());
        });

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddTransient<IClaimPrincipalManager, ClaimPrincipalManager>();

        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            options.Cookie.IsEssential = true;
        });

        services.AddControllersWithViews(); 
        }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }


        app.UseStaticFiles();

        app.UseCors("AllowMyOrigin");

        app.UseRouting();

        app.UseAuthorization();

        app.UseSession();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");

        });
    }
顺便说一句,通过实现此扩展,我正在使用方法session.LoadAsync()

public static class SessionExtensions
{
    public static async Task Set<T>(this ISession session, string key, T value)
    {
        if (!session.IsAvailable)
            await session.LoadAsync();
        session.SetString(key, JsonConvert.SerializeObject(value));
    }

    public static async Task<T> Get<T>(this ISession session, string key)
    {
        if (!session.IsAvailable)
            await session.LoadAsync();
        var value = session.GetString(key);
        return value == null ? default(T) :
                              JsonConvert.DeserializeObject<T>(value);
    }
}
公共静态类SessionExtensions
{
公共静态异步任务集(此ISession会话,字符串键,T值)
{
如果(!session.IsAvailable)
wait session.LoadAsync();
SetString(key,JsonConvert.SerializeObject(value));
}
公共静态异步任务Get(此ISession会话,字符串键)
{
如果(!session.IsAvailable)
wait session.LoadAsync();
var值=session.GetString(键);
返回值==null?默认值(T):
JsonConvert.DeserializeObject(值);
}
}
打字错误:

$http({
  method: "POST",
  url: BACKEND_URL,
  ̶w̶i̶t̶h̶C̶r̶e̶d̶e̶t̶i̶a̶l̶:̶ ̶t̶r̶u̶e̶,̶
  withCredentials: true,
  headers: ̶[̶
    { 'Content-Type': 'application/json' }
  ̶]̶
}).then(function (response) {
  console.log(response);
});
有关详细信息,请参阅


在路由之前向上移动会话。我这样做了,但还是一样;无会话密钥您不应该在WebAPI风格的ASP.NET核心应用程序中使用会话(这些是restful服务的一种配置,它是……无状态的,因此没有会话—请求测试所需的所有内容都随请求本身一起发送)。这是一个设计缺陷。会话是可以的,但是对于MVC风格的应用程序(返回视图而不是json/xml/等的控制器),它是一个MVC项目,就像一个SSO;我一直在读you@Tseng的这篇文章([),但我不知道如何实现WrappedDistributedSession类在这篇文章中我找到了解决方案[
public static class SessionExtensions
{
    public static async Task Set<T>(this ISession session, string key, T value)
    {
        if (!session.IsAvailable)
            await session.LoadAsync();
        session.SetString(key, JsonConvert.SerializeObject(value));
    }

    public static async Task<T> Get<T>(this ISession session, string key)
    {
        if (!session.IsAvailable)
            await session.LoadAsync();
        var value = session.GetString(key);
        return value == null ? default(T) :
                              JsonConvert.DeserializeObject<T>(value);
    }
}
$http({
  method: "POST",
  url: BACKEND_URL,
  ̶w̶i̶t̶h̶C̶r̶e̶d̶e̶t̶i̶a̶l̶:̶ ̶t̶r̶u̶e̶,̶
  withCredentials: true,
  headers: ̶[̶
    { 'Content-Type': 'application/json' }
  ̶]̶
}).then(function (response) {
  console.log(response);
});