HttpWebRequest
応答ヘッダーを使用して取得する必要があります。以下は概念コードの汚れた証明ですが、既存のフローに簡単に統合できます。
private void Button_Click_1(object sender, RoutedEventArgs e)
{
HttpWebRequest req = HttpWebRequest.CreateHttp("http://www.geekchamp.com/marketplace/components/windows-phone-toolkit-in-depth-3rd-edition/downloadfree?id=381255");
req.BeginGetResponse(new AsyncCallback(ReadCallback), req);
}
private void ReadCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest req = (HttpWebRequest)asynchronousResult.AsyncState;
HttpWebResponse response = (HttpWebResponse)req.EndGetResponse(asynchronousResult);
// RegEx to extract file name from headers
var reFile = new Regex("filename=\"(.*?)\"");
// The header that contains the filename. Example:
// Content-Disposition: attachment; filename="Windows Phone Toolkit In Depth 3rd Abstract.pdf"
var contentDisposition = response.Headers["Content-Disposition"];
// FIXME: this assumes match success. Might be easier to just use a replace
var filename = reFile.Match(contentDisposition).Groups[1].Value;
// ... your code here ...
}