0

我正在使用 Visual Studio 2010,代码不起作用 FileData 并且 FormData 为空。我用萤火虫检查了帖子,它有值。

我的 nuget 包版本是 ASP.NET Web API 4.0.20710.0

我从这里“http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2”举了一个例子

请参阅下面的图片

http://screencast.com/t/5fhj0CfgiG

http://screencast.com/t/KCsPizDmC

“http://screencast.com/t/hhGFGaSjV” ---> 发布图片

当我使用 HttpContext.Current.Request 时,我得到了变量。

我测试了框架 4.5 的应用程序并且工作正常,我认为可能是框架 4 的问题。

我想可能是我的视觉工作室,所以我在另外 3 台电脑上测试它,我遇到了同样的问题。

谢谢

[HttpPost]
public Task<HttpResponseMessage> PostFormData()
{
    // Check if the request contains multipart/form-data.
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    List<string> files = new List<string>();
    List<string> formData = new List<string>();

    string root = HttpContext.Current.Server.MapPath("~/App_Data");
    MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(root);

    Collection<HttpContent> values = provider.Contents;

    // 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);
            }

            // This illustrates how to get the file names.
            foreach (MultipartFileData file in provider.FileData)
            {
                files.Add(file.Headers.ContentDisposition.FileName);
                files.Add("Server file path: " + file.LocalFileName);
                Trace.WriteLine(file.Headers.ContentDisposition.FileName);
                Trace.WriteLine("Server file path: " + file.LocalFileName);
            }

            // Show all the key-value pairs.
            foreach (var key in provider.FormData.AllKeys)
            {
                foreach (var val in provider.FormData.GetValues(key))
                {
                    formData.Add(string.Format("{0}: {1}", key, val));
                    Trace.WriteLine(string.Format("{0}: {1}", key, val));
                }
            }
            return Request.CreateResponse(HttpStatusCode.OK);
        });

    return task;
}
4

1 回答 1

0

ReadAsMultiPartAsync 提供程序 FileData 属性没有值,因为您似乎没有发布任何二进制数据,例如每个屏幕截图的图像:Post Screenshot。FileData 只有在您的网页上有一个值并且当然浏览并选择要上传的文件时才会有值。具有讽刺意味的是,您使用的代码适用于 4.0 .NET 框架,因为 4.5 框架使用 await 和 async 关键字进行异步工作。有关更多信息MultipartFileData 示例,请参阅此链接。看来您的问题可能是 FormData.AllKeys。不确定这是否是“提取”您的帖子数据。

于 2012-12-25T14:59:47.720 回答