我正在尝试让我的Silverlight 4.0应用程序在用户点击某些内容以将他们带到其Web URL时启动关联的程序文件扩展名,但是如果我使用HtmlPage.Window.Navigate或HyperlinkButton,我的体验会有所不同。
我的Web URL是指向我的资源的RESTful URL,例如"http://.../objects/object-1/package"。该URL实际上是一个ASP.NET MVC 2控制器,返回具有自定义扩展名的zip内容。也就是说,HTTP响应标头如下:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 13 Apr 2011 17:22:19 GMT
X-AspNet-Version: 4.0.30319
Content-Disposition: attachment; filename=object-1.pkg
Transfer-Encoding: chunked
Cache-Control: private
Content-Type: application/zip
Connection: Close
当我使用超链接按钮时,Internet Explorer提示我打开、保存或取消。当我选择打开时,它会打开与*.pkg相关联的应用程序:
<HyperlinkButton TargetName="_blank" NavigateUri="http://localhost:8023/objects/object-1/package">Launch!</HyperlinkButton>
然而,如果我使用了一个最终使用HtmlPage.Window.Navigate命令的命令,IE会打开一个窗口然后很快关闭:
string url = string.Format("{0}/objects/object-{1}/package", _webBaseUrl, objectId.Value);
Uri uri = new Uri(url);
HtmlPage.Window.Navigate(uri, "_blank");
我使用Fiddler2进行了验证,发现在这两种情况下,HTTP请求和HTTP响应看起来是相同的。这似乎是Internet Explorer或Silverlight的一个微妙之处,我不确定是否能够克服,但我希望StackOverflow社区可以确认或否认这个问题。