使用以下教程:http ://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2 ,我使用以下控制器作为基础我实现的文件上传调用:
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// A whole lotta logic to save the file, process it, etc.
});
return task;
}
为了节省空间,我没有包含我编写的大部分逻辑,因为错误发生在 ContinueWith 的第一行,
if (t.IsFaulted || t.IsCanceled)
如果我从 VS2010 在本地运行它,上述两个布尔值都是错误的,并且代码运行良好 - 所有这些,甚至是我注释掉的额外几十行。当我将它部署到运行 IIS7 的服务器时,t.IsFaulted始终为真。我从未在 C# 中使用过异步调用,并且只在 Web API 中完成了一些简单的控制器……有什么我必须安装/配置/等的吗?在生产服务器上使其工作?
更困难的是,所有发生的异常都留在该任务中(即不会被 ELMAH 捕获),所以我不知道如何调试正在发生的事情;IIS 也没有记录事件查看器中发生的任何错误……所以我不知道到底发生了什么。关于如何使这个调试过程更容易的任何提示?