c#中是否有办法检查应用程序是否在localhost上运行(而不是生产服务器)?
我正在编写一个群发邮件程序,需要使用某个邮件队列才能在localhost上运行。
if (Localhost)
{
Queue = QueueLocal;
}
else
{
Queue = QueueProduction;
}
答案 0 :(得分:51)
由于comment有正确的解决方案,我将把它作为答案发布:
HttpContext.Current.Request.IsLocal
答案 1 :(得分:32)
如下:
public static bool OnTestingServer()
{
string host = HttpContext.Current.Request.Url.Host.ToLower();
return (host == "localhost");
}
答案 2 :(得分:18)
在应用程序配置文件中使用一个值,该值将告诉您所处的环境。
由于您使用的是asp.net,因此可以使用config file transforms来确保每个环境的设置都正确。
答案 3 :(得分:17)
看看是否有效:
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;
}
答案 4 :(得分:6)
Localhost IP地址是常量,您可以使用它来确定它是localhost还是远程用户。
但要注意,如果您已登录到生产服务器,它也将被视为localhost。
这包括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;
}
例如,与web.config中的MAC地址进行比较。
public static bool isLocalhost( )
{
return GetMACAddress() == System.Configuration.ConfigurationManager.AppSettings["LocalhostMAC"].ToString();
}
答案 5 :(得分:2)
不幸的是,核心内部不再有HttpContext.HttpRequest.IsLocal()
。
但是在检查.Net中的original implementation之后,通过选中HttpContext.Connection
来重新实现相同的行为非常容易:
mergeWith
答案 6 :(得分:1)
就像这样:
HttpContext.Current.Request.IsLocal
答案 7 :(得分:0)
这对我有用:
public static bool IsLocal
{
// MVC < 6
get { return HttpContext.Request.Url.Authority.Contains("localhost"); }
// MVC 6
get { return HttpContext.Request.Host.Contains("localhost"); }
}
如果你<{1}} },那么在Controller
之后添加Current
,就像HttpContext
此外,在HttpContext.Current.Request...
中,在MVC 6
中,View
只是HttpContext
答案 8 :(得分:0)
或者,如果您只是针对开发环境(假设您的应用不在生产中的调试中运行,则可以使用C# Preprocessor Directive):
#if debug
Queue = QueueLocal;
#else
Queue = QueueProduction;
答案 9 :(得分:0)
string hostName = Request.Url.Host.ToString();
答案 10 :(得分:0)
我知道这是一个非常古老的线程,但仍然有人在寻找直接的解决方案,那么您可以使用它:
if (HttpContext.Current.Request.Url.Host == "localhost")
{
//your action when app is running on localhost
}