我正在为我们的Intranet开发一个ASP.NET项目,它检索客户端的MachineName和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
测试/ Default.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
运行/查看 test / Default.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 或 test-server 是我的主机/服务器。
有人可以向我解释他们为何有所不同吗? 如何才能使ajax / defaut.aspx的结果与test / Default.aspx完全相同?
答案 0 :(得分:3)
在test / Default.aspx示例中,您正在创建一个源自服务器的Web请求,因此&#34; runat =&#39;服务器&#39;&#34;参数。如果您尝试创建源自客户端的ajax请求,则需要使用客户端脚本(如javascript)。您可以通过执行以下操作来使用jQuery来执行此操作:
$.ajax({
url: "/?eval=zGetClientInfo"
}).done(function(data) {
//Set your html here
});
但是,如果您真的要这样做,我会考虑研究ASP.NET Web API。如果您以某种JSON或XML格式返回结果,那么您的解决方案将更加强大,而Web API将会这样做。