如何使Silverlight客户端知道用户的IP地址

时间:2009-09-01 12:28:21

标签: c# silverlight

我正试图想办法让Silverlight客户端知道当前用户的IP地址。我以前也看到过类似的信息,但是参考将它传回服务器,这与我的目的不同。

我正在尝试编写一个简单的应用程序,根据用户的IP地址更改MediaElement的源代码。因此,仅在客户端需要IP地址。

有没有办法在不使用网络服务的情况下找到IP地址?如果我必须使用网络服务,哪一个会好用?

3 个答案:

答案 0 :(得分:6)

在这个项目工作了一段时间之后,我想我在ASP.net页面中托管时找到了一个更简单的解决方案。

<body>
    <form id="form1" runat="server" style="height:100%">
    <div id="silverlightControlHost">
       <object id="SilverlightPlugin" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">

       <param name="source" value="ClientBin/VideoPlayer.xap"/>
       <param name="onload" value="onload" />
       <param name="initParams" value="txtUserIP=<%=Request.UserHostAddress %>,cc=true,m=/relative"/>
       <param name="onError" value="onSilverlightError" />
       <param name="background" value="white" />
       <param name="minRuntimeVersion" value="3.0.40624.0" />
       <param name="autoUpgrade" value="true" />
       <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
        <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
       </a>
        </object>    
    </div>
    </form>
</body>

我更喜欢在代码中使用带有ASP <%=Request的initParams ...而不是使用JavaScript来修改Silverlight应用程序中的控件。将其传递到InitParams后,您可以将值加载到应用程序的资源字典中。我在博客文章中详细介绍了所有这些内容:Pass the IP Address of a User to Silverlight as a Parameter (注意:如果我的网站benmccormack.com链接不起作用,您可能需要直接访问该网站并查找它。我在9/26/2009发表了这篇文章

答案 1 :(得分:2)

您无法使用任何客户端mechansims(javascript,silverlight等)获取客户端计算机的IP地址。

Michale Sync发布了一篇关于如何从silverlight检索客户信息的有趣文章。silverlight-2-beta1-url-referrer-screen-resolution-clients-data-time-and-ip-address

这个approch应该工作..但也有限制

  

它无法获得实际效果   代理服务器隐藏的地址   那些地址。

答案 2 :(得分:1)

在托管Silverlight控件的aspx文件中有一堆代码

var ip ='&lt;%= Request.UserHostAddress%&gt;'

然后连接onup事件并将ip设置为你的silverlight类

function onload() {
            control = document.getElementById(
                    'SilverlightPlugin'
                  );
            iptextblock = control.Content.FindName("txtIP");
            iptextblock.Text = ip;
        }

<object id="SilverlightPlugin"  data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="ClientBin/SilverlightApplication1.xap"/>    
    <param name="onload" value="onload" />

如果您的silverlight主页在Apache中托管,那么您可以尝试使用Apache服务器:

var ip = '<!--#echo var="REMOTE_ADDR"-->';