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