0

我在我的 MVC 项目中创建了一个 Web API 控制器。每当我尝试 POST 到此控制器时,它都会尝试启动文件下载,但我不知道为什么。如果我通过 URL 导航到 API 控制器或通过表单帖子完成,就会发生这种情况。

这是一个非常简单的场景,文件将通过帖子上传。

这是控制器代码。有任何想法吗?

public class UploadController : ApiController
    {

        public async Task<List<string>> Post()
        {
            // Verify that this is an HTML Form file upload request
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }

            // Create a stream provider for setting up output streams that saves the output under c:\tmp\uploads
            // If you want full control over how the stream is saved then derive from MultipartFormDataStreamProvider
            // and override what you need.
            MultipartFormDataStreamProvider streamProvider = new MultipartFormDataStreamProvider("c:\\tmp\\");

             var task = await Request.Content.ReadAsMultipartAsync(streamProvider);

            return new List<string>();
        }

这是客户端代码:

<!DOCTYPE HTML>
<html>
<head>
    <title>HTML5 Multiple File Upload Sample</title>
</head>
<body>
    <form action="http://localhost:8080/api/upload" enctype="multipart/form-data" method="POST">
    What is your name?
    <input name="submitter" size="40" type="text"><br>
    What files are you uploading?
    <input name="data" type=file multiple>
    <br>
    <input type="submit" />
    </form>
</body>
</html>
4

1 回答 1

4

我怀疑您正在使用 Internet Explorer 来测试这个示例,不是吗?但是这个浏览器在服务器发送 JSON 时总是提示下载(是的,IE 很糟糕,我们都知道,做 Web 开发时请使用真正的 Web 浏览器)。您的控制器操作返回 IE 无法内联显示的 JSON,并要求您将其保存在客户端上。不知道你还期待什么?您的控制器操作返回一个空数组作为 JSON。你有一个 HTML 表单来上传一个文件,这个文件上传的结果是一个空的 JSON 数组,IE 不知道如何处理。

如果您使用 HTML 客户端表单,您可能希望从此 API 控制器操作返回 HTML,对吗?

于 2013-06-28T20:54:32.180 回答