我正在开发一个主要基于ASP.NET的项目。主要项目旨在针对不同的客户部署到多个位置,因此一个客户端可能位于website.com/client1,另一个客户端位于website.com/client2。在应用程序中,我们经常使用应用程序根运算符~
来获取资源的路径。
我们还有许多Flex应用程序可以部署在那里,而且很多都依赖于ASP.NET应用程序中的Web服务。我之后是一种引用相对于应用程序根目录的服务的方法。以下是两个客户端部署的某些文件的位置示例:
FlexApplication和webService都完全相同,所以我想在Flex代码中做的就是这样:
var myService:CustomService = new CustomService(~/services/webService.asmx);
myService.callMethod("Test");
我希望避免使用相对路径,这是出于通常的原因。有没有一种好方法可以做到这一点或者是一种将根URL从ASP.NET传递给flex应用程序的好方法?提前谢谢。
答案 0 :(得分:1)
避免相对URL绝对是一个好主意。最简单的方法是通过HTML嵌入语句中的Flash Vars传递信息。
查看Adobe有关使用Flash的FlashVars的文档:http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_3.html
要点:
在HTML嵌入语句中添加一行,如下所示:
<param name='flashVars' value='serviceRoot=/myserviceRoot'/>
然后通过mx.core.Application.application.parameters访问器在Flex中访问它
import mx.core.Application;
var parameters:Object = Application.application.parameters;
var serviceRoot:String = parameters['serviceRoot'];
答案 1 :(得分:1)
相对于应用程序根目录
Flex对ASP.NET应用程序的应用程序根目录一无所知。 Flex应用程序唯一知道的是它所提供的URL。它不知道页面的URL。请记住,页面的URL和SWF的URL不相同。
根据您的目录结构,您可以使用SWF的网址获取您之后的信息。
在Flex 3应用程序中,您可以使用Application标记的url属性:
(Application.application as Application).url
在Flex 4 Spark应用程序中,您还可以使用应用程序标记的url属性,但必须采用不同的方式:
(FlexGlobals.topLevelApplication as Application).url
然后,您可以使用URLUtils解析它以获取您的目录结构。可能会以某种方式将其作为全局变量存储在Flex应用程序中,并使用它来构建您对远程服务器进行的服务调用的URL。
答案 2 :(得分:0)
我使用这个方便的小实用程序通过.swf中的javascript获取URL信息。