C#如果语句不起作用
我的代码在本地网络中工作,我知道它不会在本地网络之外工作,因为我正在使用Dns.GetHostEntry将IP地址解析为主机名,这很好 但我的if语句不起作用,在尝试从不同的子网解析主机名时,我收到错误消息“找不到主机” 我想我的if语句会停止这个错误,但它不起作用,有人能帮忙吗,或者告诉我如何修复它,下面的代码C#如果语句不起作用,c#,C#,我的代码在本地网络中工作,我知道它不会在本地网络之外工作,因为我正在使用Dns.GetHostEntry将IP地址解析为主机名,这很好 但我的if语句不起作用,在尝试从不同的子网解析主机名时,我收到错误消息“找不到主机” 我想我的if语句会停止这个错误,但它不起作用,有人能帮忙吗,或者告诉我如何修复它,下面的代码 public partial class _Default : System.Web.UI.Page { //public string IPaddr1 { get; priv
public partial class _Default : System.Web.UI.Page
{
//public string IPaddr1 { get; private set; }
string serviceDesk = "eg@mail.co.uk";
string emailSubject = "MyPc";
string IPaddr = "";
string deviceName = "";
protected void Page_Load(object sender, EventArgs e)
{
getIP();
}
protected void getIP()
{
if (HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDER_FOR"] != null)
{
IPaddr = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDER_FOR"].ToString();
}
if (HttpContext.Current.Request.UserHostAddress.Length != 0)
{
IPaddr = HttpContext.Current.Request.UserHostAddress;
deviceName = Dns.GetHostEntry(IPAddress.Parse(IPaddr)).HostName;
}
if (HttpContext.Current.Request.UserHostAddress.Length != 0)
{
deviceName = "Device name could be found";
}
Label1.Text = "IP Address: " + " " + IPaddr;
Label2.Text = "PC Name: " + " " + deviceName;
}
private void EmailVerificationRequest(string recepientEmail, string subject)
{
try
{
using (MailMessage mailMessage = new MailMessage())
{
StringBuilder sbEmailBody = new StringBuilder();
sbEmailBody.Append("IP address " + IPaddr + "<br/>");
sbEmailBody.Append("Hostname " + " " + deviceName);
mailMessage.From = new MailAddress(ConfigurationManager.AppSettings["FromEmail"]);
mailMessage.Subject = subject;
mailMessage.Body = sbEmailBody.ToString();
mailMessage.IsBodyHtml = true;
mailMessage.To.Add(new MailAddress(recepientEmail));
SmtpClient smtp = new SmtpClient();
smtp.Host = ConfigurationManager.AppSettings["Host"];
smtp.Port = Convert.ToInt32(ConfigurationManager.AppSettings["Port"]);
smtp.EnableSsl = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSsl"]);
System.Net.NetworkCredential NetworkCred = new System.Net.NetworkCredential();
NetworkCred.UserName = ConfigurationManager.AppSettings["UserName"];
NetworkCred.Password = ConfigurationManager.AppSettings["Password"];
if (string.IsNullOrWhiteSpace(NetworkCred.UserName))
{
smtp.UseDefaultCredentials = true;
}
else
{
smtp.Credentials = NetworkCred;
smtp.UseDefaultCredentials = false;
}
smtp.Port = int.Parse(ConfigurationManager.AppSettings["Port"]);
try
{
smtp.Send(mailMessage);
}
catch (SmtpException e)
{
}
}
}
catch
{
}
}
protected void Button1_Click(object sender, EventArgs e)
{
EmailVerificationRequest(serviceDesk, emailSubject);
Response.Redirect("~/message.aspx");
}
}
public分部类\u默认值:System.Web.UI.Page
{
//公共字符串IPaddr1{get;private set;}
字符串serviceDesk=”eg@mail.co.uk";
字符串emailSubject=“MyPc”;
字符串IPaddr=“”;
字符串deviceName=“”;
受保护的无效页面加载(对象发送方、事件参数e)
{
getIP();
}
受保护的void getIP()
{
if(HttpContext.Current.Request.ServerVariables[“HTTP\u X\u FORWARDER\u FOR”]!=null)
{
IPaddr=HttpContext.Current.Request.ServerVariables[“HTTP_X_FORWARDER_FOR”].ToString();
}
if(HttpContext.Current.Request.UserHostAddress.Length!=0)
{
IPaddr=HttpContext.Current.Request.UserHostAddress;
deviceName=Dns.GetHostEntry(IPAddress.Parse(IPAddress)).HostName;
}
if(HttpContext.Current.Request.UserHostAddress.Length!=0)
{
deviceName=“可找到设备名称”;
}
Label1.Text=“IP地址:”+“”+IPaddr;
Label2.Text=“PC名称:”+“”+deviceName;
}
private void EmailVerificationRequest(字符串recepientEmail,字符串主题)
{
尝试
{
使用(MailMessage=newmailmessage())
{
StringBuilder sbEmailBody=新的StringBuilder();
sbEmailBody.Append(“IP地址”+IPaddr+”
);
追加(“主机名”+“”+deviceName);
mailMessage.From=新邮件地址(ConfigurationManager.AppSettings[“FromEmail”]);
mailMessage.Subject=主题;
mailMessage.Body=sbEmailBody.ToString();
mailMessage.IsBodyHtml=true;
mailMessage.To.Add(新邮件地址(recepientEmail));
SmtpClient smtp=新SmtpClient();
smtp.Host=ConfigurationManager.AppSettings[“主机”];
smtp.Port=Convert.ToInt32(ConfigurationManager.AppSettings[“端口]);
smtp.EnableSsl=Convert.ToBoolean(ConfigurationManager.AppSettings[“EnableSsl”]);
System.Net.NetworkCredential NetworkCred=新系统.Net.NetworkCredential();
NetworkCred.UserName=ConfigurationManager.AppSettings[“UserName”];
NetworkCred.Password=ConfigurationManager.AppSettings[“Password”];
if(string.IsNullOrWhiteSpace(NetworkCred.UserName))
{
smtp.UseDefaultCredentials=true;
}
其他的
{
smtp.Credentials=NetworkCred;
smtp.UseDefaultCredentials=false;
}
smtp.Port=int.Parse(ConfigurationManager.AppSettings[“端口]);
尝试
{
smtp.Send(mailMessage);
}
捕获(SMTPE异常)
{
}
}
}
接住
{
}
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
EmailVerificationRequest(服务台、emailSubject);
Response.Redirect(“~/message.aspx”);
}
}
从字典中获取值之前,必须检查字典是否包含您传递的密钥。您可以通过调用“Contains”方法来实现这一点
如果您直接检索词典的内容,并且您请求的密钥在词典对中不存在,则词典不会返回null。相反,它会从以下位置抛出KeyNotFoundException.:
如果找不到主机名,则返回值为11001的SocketException异常(Windows套接字错误WSAHOST_not_found)。如果DNS服务器没有响应,则会返回此异常。如果名称不是正式主机名或别名,或者在查询的数据库中找不到,也可以返回此异常
因此,我怀疑您的代码没有达到第三个if
条件,因为调用GetHostEntry()
会引发异常,您将其视为“错误”找不到主机“消息”
处理此问题最直接的方法是使用try…catch
块捕获特定异常并进行处理,例如:
try
{
deviceName = Dns.GetHostEntry(IPAddress.Parse(IPaddr)).HostName;
}
catch (SocketException)
{
deviceName = "Device name could be found";
}
这意味着,如果在调用GetHostEntry()
期间发生SocketException
,则代码将跳转到catch块,而不是停止应用程序的异常
请注意,这假设任何SocketException
都意味着找不到IP地址,但这可能意味着DNS服务器无法联系,或者出现其他错误
在异常处理以及如何使用try…catch
块方面有很多内容
希望这能有所帮助您是否在调试器中单步执行了代码?您是否正试图从某个私有子网中获取
PTR
记录的IP地址?或者是不存在PTR的地方?或者换句话说,您是否确定所用名称服务器知道该信息。我怀疑它只是不…是的,DNS服务器不知道IP地址的记录,这导致了错误消息,这很好,但我想我的IF语句说,如果我们无法将IP地址解析为消息的主机名,则无法找到设备…您的IF语句非常精确,也许回报值不是你想象的那样?检查函数签名
try
{
deviceName = Dns.GetHostEntry(IPAddress.Parse(IPaddr)).HostName;
}
catch (SocketException)
{
deviceName = "Device name could be found";
}