从虚拟URL获取文件名?

时间:2011-10-06 20:09:03

标签: asp.net url-rewriting httpwebrequest url-routing httpresponse

我有一个像“http://www.ti.com/lit/gpn/TPS767D318-Q1”这样的网址 这是一条路径最终被路由到浏览器上的“http://www.ti.com/lit/ds/symlink/tps767d318-q1.pdf”(呈现pdf文件)。我正在控制台应用程序中处理此URL,以获取您在我提供的第二个URL中看到的“pdf”文件名。

我检查了httpresponse对象中的UriResponse.Absoluteuri属性,并显示“http://focus.ti.com/general/docs/lit/getliterature.tsp?genericPartNumber=TPS767D318-Q1&fileType=pdf” 看起来这是一个嵌套的虚拟路径。任何人都可以帮助我到达最终URL以提取pdf文件名吗?我没有在响应对象中的任何地方找到它。我也检查了响应标头,也没有。

任何帮助将不胜感激...谢谢

3 个答案:

答案 0 :(得分:1)

不确定ASP,但在协议级别,初始请求可能会导致另一端的应用程序/服务器发出重定向,因此您可以查看初始HTTP响应并检查它是否是重定向代码, 301,302等。如果是这样,你可以按照302s直到你达到200,这是你可以用来检查文件名的最终URL。

答案 1 :(得分:1)

查看Content-Disposition标题,它可能类似于:Content-Disposition: attachment; filename=tps767d318-q1.pdf。这是从数据库,网络共享等获取和“下载”文件的Web服务的常用技术。

答案 2 :(得分:1)

事实证明,我的问题中的网址实际上是返回HTML内容并执行“元标记”重定向。所以我必须做以下事情:

var redirect = Regex.Match(new string(buffer, 0, count), @"\<meta(?=[^>]*http-equiv\W*refresh)[^>]*?content\s*\=[^=>]*url\s*\=\s*(?<Url>[^'"">]+)", RegexOptions.IgnoreCase | RegexOptions.Singleline);

if (redirect.Success)
{
    Uri uri = new Uri(new Uri(externalUrl, UriKind.Absolute), new Uri(redirect.Groups["Url"].Value, UriKind.RelativeOrAbsolute));
    return SaveUrlToTemporaryFile(uri.AbsoluteUri, needsFullDownload);
 }

我从返回的HTML内容中获取meta标签中的最终URL,然后再次调用我的下载例程。