2


0

単純なASP.Net File.IO操作でのSystem.UnauthorizedAccessException

ASP.NET(ホスト型)では、ファイルからデータを読み取り、ダウンロードを強制するための単純なファイル入出力操作が必要です。 それは本当にとても簡単です。

次のコードを実行すると、 `+ System.UnauthorizedAccessException +`が引き続き発生します。

System.IO.FileStream fs =
      new System.IO.FileStream(path, System.IO.FileMode.Open);

ローカルではうまくいきますが、共有ホスティングアカウントにアップロードすると上記の例外が発生します。

不思議なことに、ブラウザで、ファイルへのフルパスを入力すると、ファイルを表示して使用できます。

5 Answer


1


他の人が述べたように、これは、ASPプロセスがファイルディレクトリにアクセスするためのセキュリティ許可を持っていないことが最も可能性が高いです。

ブラウザ経由でファイルにアクセスできる場合は、File.OpenではなくHttpWebRequestを使用してファイルを読むことができます。

サーバーを管理者権限で管理していない場合、これは意味があります。

以下はHttpWebRequestを使用するのに役立つサンプルコードです。

/// ///指定されたURLにリクエストを送信し、テキストレスポンスを返します。リクエストが失敗した場合は空白になります。 /// ///リクエストを送信するURL。 ///指定されたURLからのテキスト応答。または、要求が失敗した場合は空。 protected string getPageResponse(string url){//デフォルトの結果文字列を設定します。responseText = string.Empty;

// System.Net.WebRequest request = System.Net.HttpWebRequest.Create(url); // URLをターゲットとするリクエストを作成します。 //リクエストの認証情報を設定する。request.Credentials = System.Net.CredentialCache.DefaultCredentials;

//リクエストからレスポンスを取得する。System.Net.HttpWebResponseレスポンス=(System.Net.HttpWebResponse)request.GetResponse(); //レスポンスコードを取得(10進数としてフォーマット)string statusCode = response.StatusCode.ToString( "d");

//(statusCode.StartsWith( "2")|| statusCode.StartsWith( "3")){//レスポンスストリームを取得できるので、ストリームレスポンスresponseStreamを取得できます。 = response.GetResponseStream(); //レスポンスを読み込むストリームリーダーを作成します。StreamReader responseReader = new StreamReader(responseStream); //レスポンステキストを読みます(これはjavascriptであるはずです)responseText = responseReader.ReadToEnd(); }

//リクエストのレスポンステキストを返すreturn responseText; }


1


ファイル操作にはIsolatedStorageを使用してください。

  • http://www.velocityreviews.com/forums/t20811-article-what-is-isolated-storage-net-framework-tools-series.html [分離ストレージとは何ですか?] *

限られた特権でコードを実行することは、ウイルスやスパイウェアを詐欺している捕食者がユーザにいることを考えると、多くの利点があります。 .NET Frameworkには、最低特権ユーザーとしての実行を処理するためのメカニズムがいくつかあります。 ほとんどのアプリケーションは(データベースや他の手段に頼ることなく)永続的な方法で状態の一部を保存する必要があるため、アプリケーションの安全性をテストせずに安全に使用できる情報を保存する場所があると便利です。データをハードドライブに保存するための十分な権限。 その解決策は、分離ストレージが提供するように設計されているものです。

データを保存するために隔離された記憶域を使用することで、ファイルシステム内の特定のファイルまたはフォルダへのアクセス権をユーザーに許可しなくても、安全に情報を保存できる場所にアクセスできます。 分離ストレージを使用する主な利点は、部分信頼、制限付き、完全信頼のいずれで実行されているかに関係なく、アプリケーションが実行されることです。

あなたは IsolatedStorageFileStreamを参照することができます。


0


問題は、ASP.NETプロセスが指定されたパスへのアクセス権を必要としていることです。


0


asp.netアプリケーションは、ASPNETという名前のユーザーのセキュリティコンテキストで実行されるため、システム上のリソースにアクセスするには、このユーザーにこれらのリソースへのアクセスを許可する必要があります。


0


`+ path `変数に渡すパスは何ですか? ブラウザにパスを入れてファイルにアクセスできる場合、これはパスに ` http://…​`が含まれていることを示唆しています。 ` System.IO.FileStream +`を使用するには、ドライブ文字またはUNCパスを持つパスを渡す必要があります。

おそらくあなたはするべきである:

// if file is in root of site...
string path = Server.MapPath("/myfile.txt");
// or if file is in /myfiles folder
string path = Server.MapPath("/myfiles/myfile.txt");
System.IO.FileStream fs =
      new System.IO.FileStream(path, System.IO.FileMode.Open);