是否可以从控制器构造函数中获取当前主机名?
Request和HttpContext对象都为null,因此Request.Url不产生任何内容。
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);
}
...
我在这里要解决的更大问题是根据主机名为Entity Framework选择连接字符串。想法?
答案 0 :(得分:17)
Request
确实为空。试试这个:
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);
}
另请注意,Request.Url
不会返回主机名,而是Uri
对象,您可以使用Url.Host
从中提取主机名。
请参阅MSDN。
答案 1 :(得分:7)
试试这个:
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
}
}
}
注意,Request.Url
是Uri
个对象,因此您应该检查Request.Url.Host
答案 2 :(得分:0)
请求URL的主机不一定必须与托管服务器名称匹配。例如,如果您使用的是DNS CNAME或负载均衡器。
如果您想要托管代码的服务器的机器名称,请在控制器操作中尝试:
string hostingMachineName = HttpContext.ApplicationInstance.Server.MachineName;
答案 3 :(得分:0)
current pc host :-
string PCName = Dns.GetHostEntry(Request.ServerVariables["REMOTE_ADDR"]).HostName;
server host :-
String hostName = Dns.GetHostName();