2017-08-01 8 views
0

私はAzureのアプリケーション(.NET 4.5)を持っていると私は私がから読みたいファイルシステムに保存されているいくつかの静的ファイルを持っていますが、私はそうアクセスファイルシステムAzureのアプリケーションサービス

よう System.UnauthorizedAccessExceptionを取得
string template = string.Empty; 
var file = HostingEnvironment.MapPath("~/App_Data/EmailTemplates/" + fileName); 
if (!string.IsNullOrEmpty(file)) 
    { 
     template = File.ReadAllText(file); <-- Unauthorized Access Exception Here 
    } 
return template; 

私はAzure Storageがベストプラクティスであることを知っていますが、どうすればこのようにできますか?

+2

MapPathの()のパスがあることは何を終わるのでしょうか? 'd:\ home \ site \ wwwroot'への完全な書き込みアクセス権があります。 (注意:あなたのウェブアプリケーションを削除しない限り、 'site'のストレージはAzure Storageのように耐久性があります)。 –

+0

地図のパスは私に正しい位置を与えますが(少なくともKuduを見て)、無効なアクセスがあります –

+1

あなたは完全なエラーを含む詳細とエラーを生成している呼び出しを含むあなたの質問を編集してください。 (私は 'ReadAllText()'を想定していますが、わかりません)。 –

答えて

2

File.ReadAllTextUnauthorizedAccessExceptionを述べたように、次の条件のいずれかが原因で発生することができます

  • パスが読み取り専用であるファイルを指定しました。

- または -

  • この操作は、現在のプラットフォームでサポートされていません。

- または -

  • パスはディレクトリを指定しました。

- または -

  • 呼び出し元に、必要な権限がありません。

あなたはクーズーコンソールを活用して、ファイルやディレクトリの属性を確認するためにAttribコマンドを使用することができます。また、あなたは、ファイルの内容を表示するか、次のようにファイルリストテーブルから[編集]ボタンをクリックしTYPEコマンドを使用するように試みることができる:

enter image description here

また、私は、新しいWebアプリケーションを作成し、私のMVCを展開しましたApp_Dataフォルダの下にファイルを表示するためのアプリケーションでは、期待どおりに動作する可能性があります。itを参照してください。

UPDATE:

//method for getting files 
public List<DownLoadFileInformation> GetFiles() 
{ 
    List<DownLoadFileInformation> lstFiles = new List<DownLoadFileInformation>(); 
    DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/App_Data")); 

    int i = 0; 
    foreach (var item in dirInfo.GetFiles()) 
    { 
     lstFiles.Add(new DownLoadFileInformation() 
     { 

      FileId = i + 1, 
      FileName = item.Name, 
      FilePath = dirInfo.FullName + @"\" + item.Name 
     }); 
     i = i + 1; 
    } 
    return lstFiles; 
} 

//action for downloading a file 
public ActionResult Download(string FileID) 
{ 
    int CurrentFileID = Convert.ToInt32(FileID); 
    var filesCol = obj.GetFiles(); 
    string fullFilePath = (from fls in filesCol 
           where fls.FileId == CurrentFileID 
           select fls.FilePath).First(); 

    string contentType = MimeMapping.GetMimeMapping(fullFilePath); 
    return File(fullFilePath, contentType, new FileInfo(fullFilePath).Name); 
} 

アップデート2:

public ActionResult ViewOnline(string FileID) 
{ 
    int CurrentFileID = Convert.ToInt32(FileID); 
    var filesCol = obj.GetFiles(); 
    string fullFilePath = (from fls in filesCol 
           where fls.FileId == CurrentFileID 
           select fls.FilePath).First(); 
    string text = System.IO.File.ReadAllText(fullFilePath); 
    return Content(text); 
} 
+0

唯一の違いは、MVCではなくAPIからこれをやっていることです。ファイルの内容を読み込みますか? –

+0

私は自分の答えを関連するコードスニペットで更新しました。また、私のjsonファイルの内容を取得するために 'File.ReadAllText'を使ってチェックしました。 –

+0

ありがとうございますので、実際にコードを後ろに開いていませんか? –

関連する問題