我有一个 asp.net mvc 应用程序,它有一个上传文件的表单。在我的本地机器上,它当然可以正常工作,但是当我在远程网络服务器上运行它时,我得到了这个错误:
异常详细信息:System.UnauthorizedAccessException:对路径“C:\directory\mytestfile.csv”的访问被拒绝。
ASP.NET 无权访问请求的资源。考虑向 ASP.NET 请求标识授予对资源的访问权限。ASP.NET 有一个基本进程标识(通常是 IIS 5 上的 {MACHINE}\ASPNET 或 IIS 6 上的网络服务),如果应用程序不模拟,则使用该标识。如果应用程序通过 模拟,则身份将是匿名用户(通常是 IUSR_MACHINENAME)或经过身份验证的请求用户。
要授予 ASP.NET 对文件的访问权限,请在资源管理器中右键单击该文件,选择“属性”并选择“安全”选项卡。单击“添加”以添加相应的用户或组。突出显示 ASP.NET 帐户,然后选中所需访问权限的复选框。
源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
我的问题是我事先不知道要上传的文件是什么(因此上传屏幕中的文件选择器)所以我不能预先授权它。
这是我的代码:
控制器动作:
public ActionResult UploadSpreadsheet(HttpPostedFileBase file)
{
var fileName = Path.Combine(Request.MapPath("~/App_Data"), Path.GetFileName(file.FileName));
file.SaveAs(fileName); //This is what blows up . . .
using (CsvReader csv = new CsvReader(new StreamReader(fileName_), true))
{
string[] headers = csv.GetFieldHeaders();
. . . .
查看表格:
<form action="/Resources/UploadSpreadsheet" method="post" id="spreadsheetForm" enctype="multipart/form-data">
<fieldset class=outerFieldSet>
<div class="legendTitle">Sync with Spreadsheet</div><hr /><br /><br />
<label>Choose Spreadsheet: </label><input size="88" class="required" type="file" name="file" />
</fieldset>
<input type="submit" class=longButton value="Syncronize Resource Data" />
</form>