アプリが(本番サーバーではなく)ローカルホストで実行されているかどうかを確認する方法はc#にありますか?
ローカルホストで実行されている特定のメールキューを使用する必要がある大量メールプログラムを作成しています。
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;
}
LocalhostのIPアドレスは一定です。これを使用して、ローカルホストかリモートユーザーかを判断できます。
ただし、本番サーバーにログインしている場合は、ローカルホストと見なされることに注意してください。
これは、IPv.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();
}
ちょうどこのような:
HttpContext.Current.Request.IsLocal
string hostName = Request.Url.Host.ToString();