2011-05-30 11 views
1

私のWebアプリケーションでは、htmlテーブルと複数行のテキストを含むaspxページを持っています。このページ全体を別のファイルとしてダウンロードできるようにする必要があります。aspxページのダウンロード

過去には、私はこれを行うためにWebクライアントを使用している:

Dim myWebClient As New System.Net.WebClient 
myWebClient.DownloadFile(strSource, strDest) 
Response.AddHeader("Content-Disposition", "attachment;filename=test.doc") 
Response.Write("test.doc") 

をこれはHTMLページのみをダウンロードすることができます表示されます。

これはできますか?

+0

は、なぜこれがマークしましたか?公正かつ明確な質問のように見えました。 – Urbycoz

答えて

3

.aspxがインターネット(提供されるHTMLのみです)で配信されないためです。

myWebClient.DownloadFile()を実行しているとき、アプリケーションはURIへのGET要求を行い、結果のHTMLを保存するだけです。 .aspxは決してサーバーから離れません。むしろサーバー側で処理され、結果としてHTMLになります。

+0

私は参照してください。より良いアプローチや回避策を提案できますか? – Urbycoz

+0

サーバーにアクセスできない場合は、 –

1

.ASPXはスクリプトページであるため、実際に元のASPXをダウンロードすることはできません。もう一方の端にあるIISサーバーには.aspxのハンドラがあり、.NET処理が行われます。一般的に、サーバがraw ASPXソースを返すことは望ましくありません。

生のASPXページを取得するには、サーバー側で特別な処理が必要です。たとえば、あなたのためにそれを行うASHXスクリプトハンドラを作成すると、getfile.ashx?filename=myfile.aspxのようなものを要求し、getfile.ashxハンドラがASPXページをディスクから読み込んでレスポンスとして書き出します。 (セキュリティ上の注意:これがあなたが選んだルートであれば、指定されたページを衛生的にして、getfile.ashx?filename=C:\my\secret\file.txtのような愚かなことをしないようにしてください)そのハンドラの信頼レベルを中程度またはそれ以下に設定する方が良いでしょう。

しかし、すべてのサーバー側の開発が必要です。クライアント側からは、サーバーが一緒にプレイするまでは何もできません。

public class MyHandler : IHttpHandler 
{ 
    public bool IsReusable 
    { 
     get { return true; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 
     var file = context.Request.QueryString["file"]; 
     //Make sure to do your security checks on the file path here. 
     using (var source = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read)) 
     { 
      source.CopyTo(context.Response.OutputStream); 
     } 
    } 
} 

セットアップできハンドラのいずれかASHXの内部またはweb.configファイルでhttpHandlers部を介して:ここで

は、ファイルハンドラの一例です。

それとも、MVC2 +を使用している場合、あなただけの同じことを達成するためにアクションを使用することができるよう、あなたはHTTPハンドラを必要としない:

public ActionResult GetFile(string path) 
{ 
    //Make sure to do your security checks 
    using (var source = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) 
    { 
     return File(source, "text/html"); 
    } 
} 
+0

-1、VB.NETタグで問題のC#ソリューションを使用するために何もできません – Predator