Я могу заставить сеансы MVC 6 работать только при использовании адресной строки браузера

#session #asp.net-core-mvc

#сеанс #asp.net-core-mvc

Вопрос:

Настройка:

Итак, у меня запущено два экземпляра Visual Studio.

1) Серверная часть: приложение MVC 6 с контроллером MVC, называемым HomeController

2) Интерфейс: проект веб-сайта. HTML.

Я не создавал его с использованием традиционных представлений в mvc, а отдельной веб-страницы HTML, используя серверную часть MVC для передачи данных. — Мне нравится, когда они разделены.

Тест:

Итак, я хотел впервые использовать сеансы в MVC 6 и следовал этому руководству.

Первые тесты прошли нормально, так как я не стал писать html и ajax, я просто вызвал mvc из адресной строки следующим образом:

http://localhost:55043/home/setsession

Код, стоящий за этим:

 [HttpGet]
public string SetSession()
{
   string sessionId = "1";
   HttpContext.Session.SetString(sessionId, "myvalue");
   return sessionId;
}
  

И затем:

http://localhost:55043/home/getsession?sessionId=1

Код, стоящий за этим:

 [HttpGet]
public string GetSession(string sessionId)
{
   string value = HttpContext.Session.GetString(sessionId);
   return "session value is: "   value;
}
  

Он вернул мое значение правильно.

Проблема:

Но когда я написал веб-сайт и его вызовы с использованием одних и тех же методов, он не запомнил значение, установленное во втором вызове.

Мой код выглядит так:

 $.ajax({
    url: url   "/home/SetSession",
    type: 'GET',
    async: true,
    crossDomain: true,
    cache: true,
    success: function (data) {
        alert("finito - Sessionid: "   data);
        $.ajax({
            url: url   "/home/GetSession",
            data: {
                sessionId: data,
            },
            type: 'GET',
            async: true,
            crossDomain: true,
            cache: true,
            success: function (data) {
                alert(data);
            },
            error: function (x, t, m) {
                alert("failed");
            }
        });
    },
    error: function (x, t, m) {
        alert("failed);
    }
});
  

Так почему же это не работает для моего сайта? В чем разница?

Некоторые из моих Startup.cs:

 public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();
    services.AddCors();
    services.AddCaching();
    services.AddSession(options => {
        options.IdleTimeout = TimeSpan.FromMinutes(30);
        options.CookieName = ".BrunataBooking";
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();

    app.UseIISPlatformHandler();

    app.UseStaticFiles();

    app.UseSession();

    app.UseCors(builder =>
    {
        builder.WithOrigins("*")
               .WithMethods("GET", "POST")
               .AllowAnyHeader();
    });

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Start}/{id?}");
    });
}