我的ASP.NET结果不同

时间:2014-11-18 04:32:28

标签: asp.net vb.net

我正在为我们的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完全相同?

1 个答案:

答案 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将会这样做。