Salve a tutti

Sto realizzando un piccolo sito web in asp.net con vs2019 community.

La struttura e composta da due cartello private_page e public_page

All'interno di queste cartelle ho le seguenti pagine: public_page --> Default.aspx e Login.aspx.
Mentre in private_page ho Admin.aspx.

Dalla Default.aspx ho un linkbutton dal quale accedo alla pagina Login.asxp, dove faccio il login per accedere alla sezione Admin del sito.

il web.config è cosi configurato:

codice:
<?xml version="1.0" encoding="utf-8"?>

<!--
  Per altre informazioni su come configurare l'applicazione ASP.NET, vedere
 https://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.7.2"/>
    <httpRuntime targetFramework="4.7.2"/>
  </system.web>

  <location path="~/public_page">
    <system.web>   
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

  <location path="~/private_page">
    <system.web>
    
      <authentication mode="Forms">
        <forms name=".ASPXFORMSAUTH" loginUrl="~/public_page/Login.aspx" defaultUrl="~/private_page/Admin.aspx" protection="All" timeout="20" path="/">
        </forms>
      </authentication>
      
      
      <authorization>
        <deny users="?"/>
        
      </authorization>
    </system.web>
  </location>

  <appSettings>
    <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
  </appSettings>
  
  
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>

</configuration>

pagina Login.aspx

codice:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="GestioneClimaSerreWeb.public_page.Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" style="background-color: #339966">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div style="width: 315px; margin-left: auto; margin-right: auto;">
            <asp:Login ID="Login1" runat="server" OnAuthenticate="ValidateUser">
            </asp:Login>
        </div>
    </form>
</body>
</html>
Pagina Login lato c#

codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace GestioneClimaSerreWeb.public_page
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void ValidateUser(object sender, EventArgs e)
        {
            //codice verifica utente .......
            //......
            //......



            switch (userId)
            {
                case -1:
                    Login1.FailureText = "Username and/or password is incorrect.";
                    //FormsAuthentication.SignOut();
                    //FormsAuthentication.RedirectToLoginPage();
                    break;
                default:
                    //FormsAuthentication.RedirectFromLoginPage(Login1.UserName, Login1.RememberMeSet);
                    FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
                    Response.Redirect("~/private_page/Admin.aspx");

                    break;
            }
        }
    }
}
Allora finchè avevo le pagine tutte nella root utilizzavo FormsAuthentication.RedirectFromLoginPage(Login1.U serName, Login1.RememberMeSet); e andava bene. Ora mi porta sempre su Default.aspx che ovviamente non trova nella radice.

Ho ricreato da zero il progetto ma niente, eppure qui

codice:
authentication mode="Forms">
        <forms name=".ASPXFORMSAUTH" loginUrl="~/public_page/Login.aspx" defaultUrl="~/private_page/Admin.aspx" protection="All" timeout="20" path="/">
        </forms>
      </authentication>
imposto su defaultUrl dove puntare ma viene ignorato.

Poi ho ripiegato su

codice:
FormsAuthentication.SetAuthCookie(Login1.UserName, Login1.RememberMeSet);
Response.Redirect("~/private_page/Admin.aspx");
e funziona, anche se vorrei capire dove sbaglio.

Infine nella Default.aspx vicino al linkbutto per eseguire il login ho messo un <asp:LoginStatus ID="LoginStatus1" runat="server" />

Anche questo, finché le pagine erano tutte nella root in automatico "capiva" quando ero loggato e se ci clikkavo sopra mi faceva il logout o viceversa se non ero loggato mi riportava alla pagina di login. Ora che ho ricreato il progetto e creato le pagine nelle cartelle come sopra indicato, il LoginStatus1 mi da sempre "accedi" e se ci clikka va a cercare la pagina login.asxp nella root... Sono giorni che impazzisco ma non capisco dove ho fatto casini.

Se vi chiedete il perchè ho tolte le pagine dalla root e messo nelle cartelle, ecco la risposta.

https://serverfault.daytorrents.com/q/306896

GRAZIE a tutti per l'interesse, spero in un aiuto per venirne fuori.