获取Flex的ASP.NET根路径?

时间:2011-02-21 20:50:49

标签: asp.net flex actionscript path url-mapping

我正在开发一个主要基于ASP.NET的项目。主要项目旨在针对不同的客户部署到多个位置,因此一个客户端可能位于website.com/client1,另一个客户端位于website.com/client2。在应用程序中,我们经常使用应用程序根运算符~来获取资源的路径。

我们还有许多Flex应用程序可以部署在那里,而且很多都依赖于ASP.NET应用程序中的Web服务。我之后是一种引用相对于应用程序根目录的服务的方法。以下是两个客户端部署的某些文件的位置示例:

  • 客户A
    • website.com/clientA/swf/FlexApplication.swf
    • website.com/clientA/services/webService.asmx
  • 客户B
    • website.com/clientB/swf/FlexApplication.swf
    • website.com/clientB/services/webService.asmx

FlexApplication和webService都完全相同,所以我想在Flex代码中做的就是这样:

var myService:CustomService = new CustomService(~/services/webService.asmx);
myService.callMethod("Test");

我希望避免使用相对路径,这是出于通常的原因。有没有一种好方法可以做到这一点或者是一种将根URL从ASP.NET传递给flex应用程序的好方法?提前谢谢。

3 个答案:

答案 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)