我有一个Azure应用程序(.Net 4.5),我有一些静态文件存储在我想要读取的文件系统上,但我得到一个 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存储,但我如何以这种方式工作呢?
答案 0 :(得分:2)
由于File.ReadAllText表示UnauthorizedAccessException,可能是由以下某种情况引起的:
- path指定了一个只读的文件。
-OR -
- 当前平台不支持此操作。
-OR -
- path指定了一个目录。
-OR -
- 来电者没有所需的权限。
您可以利用kudu控制台并使用Attrib命令检查文件或目录的属性。此外,您可以尝试使用TYPE命令显示文件的内容,或单击文件列表中的“编辑”按钮,如下所示:
此外,我创建了一个新的Web应用程序并部署了我的MVC应用程序以显示App_Data
文件夹下的文件,它可以按预期工作,您可以参考it。
<强>更新强>
//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);
}
<强> UPDATE2:强>
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);
}