我的 ASP.NET 结果不同



我正在为我们的内部网开发一个 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.5devctr 是我的机器,因此直接查看 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 将执行此操作。

最新更新