从Multipart Content读取.csv文件 - 不读取为FileData

时间:2016-12-29 15:01:22

标签: c# csv asp.net-web-api multipartform-data

我正在构建一个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>
}

0 个答案:

没有答案