2010-02-04 4 views
2

J'ai 2 projets dans ma solution.ASP.Net MVC: Comment accéder à la session à partir d'un projet différent dans la solution?

  1. MVC application Web
  2. bibliothèque de classe

    • L'application Web MVC fait référence à la bibliothèque de classes.
    • La bibliothèque de classes contient une classe qui étend le contrôleur ASP.Net par défaut.

Je mets une variable en session dans Global.asax de l'application.

protected void Session_Start(object sender, EventArgs args) 
{ 
    HttpContext.Current.Session["DomainName"] = Request.Url.Host; 
} 

Dans la bibliothèque de classes que je suis en train d'obtenir la valeur de la HttpContext.Session, mais HttpContext.Session revient sans cesse nul.

public class MyController : System.Web.Mvc.Controller 
{ 
    public MyController() : base() 
    { 
     //HttpContext.Session is always null at this point 
     ViewData["DomainName"] = HttpContext.Session["DomainName"]; 
    } 
} 

HttpContext. Current .Session ne semble pas être une option dans les contrôleurs. Des idées?

Répondre

3

Deux problèmes - la propriété HttpContext dans la classe de contrôleur est la session en cours. Malheureusement, il n'est pas disponible dans le constructeur du contrôleur. Évidemment, car il n'est pas passé dans le constructeur, il doit être défini via la propriété par la suite. Vous pourriez envisager d'ajouter une propriété pour contenir le nom de domaine et référencer la session à partir de ce nom - de cette façon, il serait disponible pour une utilisation si nécessaire.

protected string DomainName 
{ 
     get { return this.HttpContext.Session["DomainName"] as string; } 
} 

L'ensemble dans ViewData dans vos actions ou OnActionExecuting/OnActionExecuted.

protected override void OnActionExecuted(ActionExecutedContext context) 
{ 
     ViewData["DomainName"] = this.HttpContext.Session["DomainName"]; 
     // or ViewData["DomainName"] = this.DomainName; // if you used the property 
} 
1

Si vous essayez simplement d'ajouter ViewData à partir de la session, essayez de le faire dans la méthode OnActionExecuting. C'est là que j'ajoute généralement ViewData que je veux pour chaque View.

0

Vous utilisez simplement Session en lui-même (c'est une propriété de Controller), mais cela correspond seulement à Controller.HttpContext.Session (en d'autres termes, ce que vous utilisez déjà), donc cela ne résoudra pas votre problème, qui doit être ailleurs .

Je ne sais pas pourquoi vous mettez ceci dans la session, cependant, comme vous pouvez lire Request.Url.Host directement pendant l'action.

+0

Merci Craig, oui, je réalise que je peut simplement référencer la session directement dans ce cas. J'avais l'habitude de référencer le contexte tout d'abord dans un projet séparé lorsque je fais des WebForms. :) Oui, je sais que je peux lire Request.Url.Host directement, mais c'était plus d'un genre principal d'une question de la façon de le faire période. Merci encore pour vos commentaires. –

0

Lorsque vous créez cookies, vous devez écrire

Response.AppendCookie("Your cookie name"); 

Et si vous voulez obtenir ce alors quelque chose comme ça

if (Request.Cookies["Your cookie name"] != null) 
    { 
     string value = Request.Cookies["Your cookie name"].Value; 
    } 

et doit s'il existe différentes solutions puis

machineK ey

besoin d'être même qui est sous

system.web

dans web.config puis écrire

<httpCookies domain=".yourdomainname.com" /> 
Questions connexes