Est-il possible d'obtenir le nom d'hôte actuel auprès du constructeur du contrôleur?
Les objets Request et HttpContext étant tous deux nuls, Request.Url ne génère rien.
public class HomeController : Controller
{
private readonly MyEntities _entities;
public HomeController()
{
//
var hostname = Request.Url;
if (hostname.Contains("localhost")) EFConnectionStringName="localhost";
else EFConnectionStringName="default";
_entities = new MyEntities(EFConnectionStringName);
}
...
Le plus gros problème que j'essaie de résoudre ici est de choisir une chaîne de connexion pour Entity Framework basée sur le nom d'hôte. Des idées?
Request
est bien nul pendant la construction de votre contrôleur. Essayez ceci à la place:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
var hostname = requestContext.HttpContext.Request.Url.Host;
// do something based on 'hostname' value
// ....
base.Initialize(requestContext);
}
Veuillez également noter que Request.Url
ne renverra pas le nom d’hôte mais un objet Uri
à partir duquel vous pourrez extraire le nom d’hôte à l’aide de Url.Host
.
Voir MSDN .
Essaye ça:
public class HomeController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
Debug.Print("Host:" + Request.Url.Host); // Accessible here
if (Request.Url.Host == "localhost")
{
// Do what you want for localhost
}
}
}
Notez que Request.Url
est un objet Uri
, vous devriez donc cocher Request.Url.Host
L'URL de requête de l'hôte ne doit pas nécessairement correspondre au nom du serveur d'hébergement. Par exemple, si vous utilisez des CNAME DNS ou des loadbalancers DNS.
Si vous souhaitez connaître le nom de la machine du serveur hébergeant le code, essayez ceci dans l'action de votre contrôleur:
string hostingMachineName = HttpContext.ApplicationInstance.Server.MachineName;