Web API控制器POST尝试在客户端上下载文件

时间:2013-06-28 20:35:51

标签: asp.net-mvc-4 asp.net-web-api

我在MVC项目中创建了一个Web API控制器。每当我尝试POST到这个控制器,它尝试启动文件下载,我不知道为什么。如果我通过URL导航到API控制器或者通过Form post完成,则会发生这种情况。

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

这是控制器代码。有什么想法吗?

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>

1 个答案:

答案 0 :(得分:4)

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

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