如何检查本地主机
本文关键字:主机 检查 何检查 | 更新日期: 2024-11-06 15:18:29
# 中有没有办法检查应用程序是否在本地主机上运行(而不是生产服务器)?
我正在编写一个需要使用某个邮件队列的群发邮件程序,它在本地主机上运行。
if (Localhost)
{
Queue = QueueLocal;
}
else
{
Queue = QueueProduction;
}
由于评论有正确的解决方案,我将发布它作为答案:
HttpContext.Current.Request.IsLocal
像这样的事情呢:
public static bool OnTestingServer()
{
string host = HttpContext.Current.Request.Url.Host.ToLower();
return (host == "localhost");
}
在应用程序配置文件中使用一个值,该值将告诉您所处的环境。
由于您使用的是 asp.net,因此您可以利用配置文件转换来确保每个环境的设置正确。
看看这是否有效:
public static bool IsLocalIpAddress(string host)
{
try
{ // get host IP addresses
IPAddress[] hostIPs = Dns.GetHostAddresses(host);
// get local IP addresses
IPAddress[] localIPs = Dns.GetHostAddresses(Dns.GetHostName());
// test if any host IP equals to any local IP or to localhost
foreach (IPAddress hostIP in hostIPs)
{
// is localhost
if (IPAddress.IsLoopback(hostIP)) return true;
// is local address
foreach (IPAddress localIP in localIPs)
{
if (hostIP.Equals(localIP)) return true;
}
}
}
catch { }
return false;
}
参考: http://www.csharp-examples.net/local-ip/
本地主机 IP 地址是常量,您可以使用它来确定它是本地主机还是远程用户。
但请注意,如果您登录到生产服务器,它也将被视为本地主机。
这包括 IP v.4 和 v.6:
public static bool isLocalhost( )
{
string ip = System.Web.HttpContext.Current.Request.UserHostAddress;
return (ip == "127.0.0.1" || ip == "::1");
}
要完全确定代码在哪个服务器上运行,您可以使用 MAC 地址:
public string GetMACAddress()
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
String sMacAddress = string.Empty;
foreach (NetworkInterface adapter in nics)
{
if (sMacAddress == String.Empty)// only return MAC Address from first card
{
IPInterfaceProperties properties = adapter.GetIPProperties();
sMacAddress = adapter.GetPhysicalAddress().ToString();
}
} return sMacAddress;
}
来自: http://www.c-sharpcorner.com/uploadfile/ahsanm.m/how-to-get-the-mac-address-of-system-using-Asp-NetC-Sharp/
例如,与web.config中的MAC地址进行比较。
public static bool isLocalhost( )
{
return GetMACAddress() == System.Configuration.ConfigurationManager.AppSettings["LocalhostMAC"].ToString();
}
核心中不再有HttpContext.HttpRequest.IsLocal()
。
但是在检查 .Net 中的原始实现后,通过检查HttpContext.Connection
很容易重新实现相同的行为:
private bool IsLocal(ConnectionInfo connection)
{
var remoteAddress = connection.RemoteIpAddress.ToString();
// if unknown, assume not local
if (String.IsNullOrEmpty(remoteAddress))
return false;
// check if localhost
if (remoteAddress == "127.0.0.1" || remoteAddress == "::1")
return true;
// compare with local address
if (remoteAddress == connection.LocalIpAddress.ToString())
return true;
return false;
}
或者,如果您只是面向开发环境,则可以使用 C# 预处理器指令(这是假设您的应用未在生产环境中的调试中运行!
#if debug
Queue = QueueLocal;
#else
Queue = QueueProduction;
就像这样:
HttpContext.Current.Request.IsLocal
这是非常古老的线程,但仍然有人在寻找一个直接的解决方案,那么你可以使用这个:
if (HttpContext.Current.Request.Url.Host == "localhost")
{
//your action when app is running on localhost
}
字符串 hostName = Request.Url.Host.ToString();
这是一个替代的、更透明的选项:
public static bool IsLocal
{
// MVC < 6
get
{
var authority = HttpContext.Request.Url.Authority.ToLower();
return authority == "localhost" ||
authority.StartsWith("localhost:");
}
// MVC 6+
get
{
return String.Compare(HttpContext.Request.Url.Host, "localhost",
StringComparison.OrdinalIgnoreCase);
}
}
如果您没有在Controller
中执行此操作,请在HttpContext
后添加Current
,如HttpContext.Current.Request...
此外,在MVC 6
,在View
中,HttpContext
只是Context