我正在构建一个WebAPI调用,它接受一个上传的.csv文件,读取该文件,然后根据内容采取行动。至少,它应该做什么。
我正在处理ASP.NET documentation和许多其他地方的代码,所有代码都表明我的文件内容应该被读入provider.FileData
。但是,它们被读入provider.FormData
,好像它们是更通用的表单元素。它存在于一个长字符串中,具有不一致的分隔符并且没有要使用的键/值对。我一直在研究SO问题,但没有找到任何有用的东西。
如何让文件读入FileData,或者解析FormData中的内容?
在控制器中:
public async Task<HttpResponseMessage> ImportPersons()
{
if (!Request.Content.IsMimeMultipartContent())
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
var provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/App_Data"));
await Request.Content.ReadAsMultipartAsync(provider);
if (!provider.FileData.Any()) //evaluated as true
throw new InvalidOperationException("File does not contain any data.");
var personsToImport = new List<Persons>();
foreach (var record in provider.FileData)
{
//handle file contents
//code omitted
}
在视图中(简化):
我猜测该程序可能会根据文件的结果将其视为一个简单的表单输入,但将其更改为仅包含一个文件上传输入并不会影响该问题。
@using (Html.BeginForm("Import", "Persons", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<fieldset>
<div >
<input type="text" disabled/>
<span>
<input type="file" name="FileUpload" id="FileUpload" accept=".csv" required />
Browse...
</span>
</div>
<div class="form-submit">
<a href="@Url.Action("Index", "Persons")">Cancel</a>
<input type="submit" value="Import File"/>
</div>
</fieldset>
}