我正在上传文件,为此我在jQuery ajax中使用FormData对象并将它传递给ASP.NET MVC WEB API,它工作正常,我能够获取文件在服务器端,但我想通过相同的请求传递一些额外的细节。如何将FormData中的其他数据发送到web api
我可以在标题中添加额外的数据,并且我可以在服务器端从头文件中获取数据,但是我也会为移动应用使用相同的API。所以如果我可以将数据作为函数的参数传递,那么它会很好。
那么如何在formData对象中传递额外的数据以及如何在服务器端获取它呢?
我的代码,
function uploadEvaluationFile() {
var files = $("#file_UploadFile1").get(0).files;
if (files.length > 0) {
if (window.FormData !== undefined) {
var data = new FormData();
for (var x = 0; x < files.length; x++) {
data.append("file1" + x, files[x]);
}
data.append("UserId", 5);
data.append("ArtCategory", 5);
data.append("Title", "Title1");
data.append("Description", "Desc 1");
$.ajax({
type: "POST",
url: '/Home/saveEvaluationFile',
contentType: false,
processData: false,
data: data,
async: false,
beforeSend: function (xhr) {
xhr.setRequestHeader('identifier', 111);
xhr.setRequestHeader('oldFileName', 222);
},
dataType: "json",
success: function (result) {
console.log(result);
},
error: function (err) {
console.log(err);
}
});
} else {
alert("This browser doesn't support HTML5 file uploads!");
}
}
}
网络API代码,
[HttpPost]
public async Task<JsonResult> saveEvaluationFile(EvaluationFileDetails FileData)
{
IEnumerable<string> headerValues = Request.Headers.GetValues("oldFileName");
var oldFileName = headerValues.FirstOrDefault();
IEnumerable<string> headerValues1 = Request.Headers.GetValues("identifier");
var newFileName = headerValues1.FirstOrDefault();
try
{
foreach (string file in Request.Files)
{
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase;
}
}
catch (Exception)
{
return Json("Upload failed");
}
return Json("File uploaded successfully");
}
我的班级,
public class EvaluationFileDetails
{
public HttpPostedFileBase file1 { get; set; }
public int UserId { get; set; }
public int ArtCategory { get; set; }
public string Title { get; set; }
public string Description { get; set; }
}
可能重复[如何追加整套模型在MVC以FORMDATA和获得它](http://stackoverflow.com/questions/29293637/how-to-append-whole-set-of-model-to-formdata-and-obtain-it-in-mvc) –
我不能通过HttpPostedFileBase,因为我我没有使用表单标签。在对象中,我也可以添加文件。 ? –
不确定你的意思。你可以使用FormData传递任何你想要的东西。但是如果你只是为你的方法添加参数(例如模型),你会发现这很容易,所以你没有访问值的形式请求' –