我正在为我们的内部网开发一个 ASP.NET 项目,该项目检索客户的机器名称和IPAddress,我正在使用以下代码。
ajax/default.aspx.vb
Public Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Request.QueryString.Count > 0 Then
Select Case Request.QueryString("eval")
Case Else
Dim type As Type = type.GetType("ajax_default")
Dim method As MethodInfo = type.GetMethod("zzfxn_" & Request.QueryString("eval").ToString, BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance)
If method IsNot Nothing Then
method.Invoke(Me, New Object() {Request})
End If
End Select
End If
End Sub
Public Sub zzfxn_zGetClientInfo(ByVal r As System.Web.HttpRequest)
Response.Write("Client IP Address: " & Request.UserHostName & "|" & Request.UserHostAddress & "<br />")
Response.Write("Client Machine Name: " & System.Net.Dns.GetHostEntry(Request.UserHostName).HostName.Split(".")(0))
End Sub
测试/默认.aspx
<%@ Page Language="VB" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<style type="text/css">.hid{display: none;}</style>
</head>
<body>
<form id="form1" name="form1" runat="server">
<div>
<p>My client info is: <%= InvokeAjax("?eval=zGetClientInfo")%></p>
</div>
</form>
<script type="text/VB" runat="server">
Protected Function InvokeAjax(ByVal params As String) As String
Dim wc As New System.Net.WebClient
wc.Headers.Add("user-agent", Request.UserAgent)
Dim ru As String = Request.Url.ToString.Remove(Request.Url.ToString.IndexOf("/test")) & "/ajax/default.aspx"
Return wc.DownloadString(ru & params).ToString
End Function
</script>
</body>
</html>
我将项目部署到测试服务器 Windows Server 2000 ASP.NET 4,并得到以下结果。
运行/查看 ajax/Default.aspx?eval=zGetClientInfo 结果为:
Client IP Address: 10.20.10.5|10.20.10.5
Client Machine Name: devctr
运行/查看测试/默认.aspx结果为:
My client info is: Client IP Address: 10.20.10.60|10.20.10.60
Client Machine Name: test-server
10.20.10.5 或 devctr 是我的机器,因此直接查看 ajax/default.aspx 返回精确/真实内容,而 10.20.10.60 或测试服务器是我的主机/服务器。
有人可以向我解释为什么他们不同吗?我怎样才能使 ajax/defaut.aspx 的结果与 test/Default.aspx 完全相同?
在 test/Default.aspx 示例中,您正在创建一个源自服务器的 Web 请求,因此是"runat='server'"参数。 如果您尝试创建源自客户端的 ajax 请求,则需要使用像 javascript 这样的客户端脚本。 你可以使用 jQuery 来做到这一点,具体操作如下:
$.ajax({
url: "/?eval=zGetClientInfo"
}).done(function(data) {
//Set your html here
});
但是,如果您真的要这样做,我会考虑研究 ASP.NET Web API。 如果以某种 JSON 或 XML 格式返回结果,则解决方案将更加可靠,Web API 将执行此操作。