2013-06-18 42 views
6

Tôi đang sử dụng jQuery ajax để tải lên tập tin nhưng muốn thêm một số thông số về phương pháp WebAPI, đây là:WebAPI ajax formdata tải lên với các thông số phụ

var data = new FormData(); 
data.append("file", $("#file")[0].files[0]); 
data.append("myParameter", "test"); // with this param i get 404 

$.ajax({ 
    url: '/api/my/upload/', 
    data: data, 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function (data) { 
     console.log(data); 
    } 
}); 

Bộ điều khiển WebAPI:

public class MyController : ApiController 
{ 
    public string Upload(string myParameter) 
    { 
     return System.Web.HttpContext.Current.Request.Files.Count.ToString() + "/" + myParameter; 
    } 
} 

Nếu không có myParameter tất cả mọi thứ làm việc nhưng khi tôi bao gồm myParameter trên formdata và phương pháp api tôi nhận được 404, bất kỳ cơ hội để làm cho nó hoạt động?

+0

bạn đời, bạn có thể đăng mã hoàn chỉnh đang hoạt động cho bạn. tôi dường như tìm thấy nó khó khăn để có được một giải pháp tốt hơn. cheers –

Trả lời

13

Đăng kết quả đối tượng FormData trong yêu cầu với nhiều loại nội dung/biểu mẫu-dữ liệu. Bạn cần phải đọc nội dung yêu cầu như vậy:

[HttpPost] 
public async Task<string> Upload() 
{ 
    var provider = new MultipartFormDataStreamProvider("C:\\Somefolder"); 
    await Request.Content.ReadAsMultipartAsync(provider); 

    var myParameter = provider.FormData.GetValues("myParameter").FirstOrDefault(); 
    var count = provider.FileData.Count; 

    return count + "/" + myParameter; 
} 

BTW, điều này sẽ lưu các tập tin trong đường dẫn chỉ định, đó là C:\\SomeFolder và bạn có thể lấy tên tập tin địa phương sử dụng provider.FileData[0].LocalFileName;

Xin hãy xem tại MSDN code sampleHenrik's blog entry.

+1

Điều này có vẻ hứa hẹn cho kịch bản của tôi; nhưng làm thế nào để một C# (không phải jQuery) khách hàng gọi phương thức này? Tôi cần phải vượt qua hai chuỗi arg và một tập tin XML. –

+0

'Tác vụ ' nhận lỗi tại thời điểm này. bất kỳ ý tưởng làm thế nào để vượt qua mảng quan sát và tập tin để điều khiển. cổ vũ –

Các vấn đề liên quan