Sans routage, HttpContext.Current.Session
y est si je sais que l' StateServer
travaille. Quand je voie mes demandes, HttpContext.Current.Session
est null
dans le acheminé page. Je suis à l'aide .NET 3.5 sp1 sur IIS 7.0, sans le MVC aperçus. Il semble que l' AcquireRequestState
n'est jamais déclenché lors de l'utilisation de routes et donc la variable de session n'est pas instancié/rempli.
Lorsque j'essaie d'accéder aux variables de Session, j'ai cette erreur:
base {System.Runtime.InteropServices.ExternalException} = {"Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System.Web.SessionStateModule or a custom session state module is included in the <configuration>.
Pendant le débogage, j'ai aussi l'erreur que l' HttpContext.Current.Session
n'est pas accessible dans ce contexte.
--
Mon web.config
ressemble à ceci:
<configuration>
...
<system.web>
<pages enableSessionState="true">
<controls>
...
</controls>
</pages>
...
</system.web>
<sessionState cookieless="AutoDetect" mode="StateServer" timeout="22" />
...
</configuration>
Voici la IRouteHandler mise en œuvre:
public class WebPageRouteHandler : IRouteHandler, IRequiresSessionState
{
public string m_VirtualPath { get; private set; }
public bool m_CheckPhysicalUrlAccess { get; set; }
public WebPageRouteHandler(string virtualPath) : this(virtualPath, false)
{
}
public WebPageRouteHandler(string virtualPath, bool checkPhysicalUrlAccess)
{
m_VirtualPath = virtualPath;
m_CheckPhysicalUrlAccess = checkPhysicalUrlAccess;
}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
if (m_CheckPhysicalUrlAccess
&& !UrlAuthorizationModule.CheckUrlAccessForPrincipal(
m_VirtualPath,
requestContext.HttpContext.User,
requestContext.HttpContext.Request.HttpMethod))
{
throw new SecurityException();
}
string var = String.Empty;
foreach (var value in requestContext.RouteData.Values)
{
requestContext.HttpContext.Items[value.Key] = value.Value;
}
Page page = BuildManager.CreateInstanceFromVirtualPath(
m_VirtualPath,
typeof(Page)) as Page;// IHttpHandler;
if (page != null)
{
return page;
}
return page;
}
}
J'ai aussi essayé de mettre la EnableSessionState="True"
sur le haut de la page aspx, mais encore, rien.
Des idées? Devrais-je écrire un autre HttpRequestHandler
qui implémente IRequiresSessionState
?
Merci.