asp net mvc ajax file upload with antiforgerytoken and without formData

时间:2017-07-12 08:16:09

标签: c# jquery ajax asp.net-mvc

I have an asp.net mvc application and want to upload files and form data with ajax and also want to use [ValidateAntiForgeryToken]-Attribute. But i not want use formData class client side (because of brower support).

My client code:

function sendMessage(id) {
    if (window.FormData !== undefined) { //
        var fileData = new FormData();
        fileData.append('profileId', id);
        fileData.append('title', $('#Message_Title').val());
        fileData.append('text', $('#Message_Text').val());
        fileData.append('__RequestVerificationToken', $('[name=__RequestVerificationToken]').val());
        var files = $("#Message_Image").get(0).files;
        if (files[0]) {
            fileData.append(files[0].name, files[0]);
        }
        $.ajax({
            url: '/Manage/SendMessage',
            type: "POST",
            contentType: false,
            processData: false,
            data: fileData,
            success: function (result) {
                alert(result);
            },
            error: function (err) {
                alert(err.statusText);
            }
        });
    } else {
        var files2 = $("#Message_Image").get(0).files;
        $.ajax({
            url: '/Manage/SendMessage',
            type: 'POST',
            //contentType: false,
            //processData: false,
            data: {
                profileId: id,
                title: $('#Message_Title').val(),
                text: $('#Message_Text').val(),
                //image: files2[0], <--- IF I UNCOMMENT THIS IT NOT WORKS ANYMORE
                __RequestVerificationToken: $('[name=__RequestVerificationToken]').val()
            },
            success: function (result) {
            },
            error: function (err) {
                alert(err.statusText);
            }
        });
    }
};

Server code:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public JsonResult SendMessage(int? profileId, string title, string text)
    {
        HttpPostedFileBase file = Request.Files["Image"];
        HttpFileCollectionBase files = Request.Files;
        return Json(null, "text/html");
    }

0 个答案:

没有答案