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

Ben*_*ack 10 c# silverlight

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

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

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

Ben*_*ack 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>
Run Code Online (Sandbox Code Playgroud)

我更喜欢<%=Request在代码中直接使用带有ASP的initParams,而不是使用JavaScript来修改Silverlight应用程序中的控件.将其传递到InitParams后,您可以将值加载到应用程序的资源字典中.我在博客文章中详细介绍了所有这些内容:将用户的IP地址作为参数传递给Silverlight (注意:如果我的网站benmccormack.com的链接不起作用,您可能必须转到网站直接找到它.我在9/26/2009发布了这篇文章.

  • 要添加到这个答案,您可以在`e.InitParams ["txtUserIP"]中的`App.xaml.cs`的`Application_Startup`方法中找到Silverlight中的变量. (2认同)