使用以下教程: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 始终为true。我从来没有在C#中使用异步调用,并且只在Web API中完成了一些简单的控制器......我是否需要安装/配置/等等。在生产服务器上使它工作?
让事情变得更加困难的是,所有正在发生的异常都会留在那个任务中(即不要被ELMAH抓住),所以我不知道如何调试正在发生的事情; IIS也没有记录事件查看器中发生的任何错误......所以我不知道究竟发生了什么。有关如何简化调试过程的任何提示?