如何将FormData读入Web API

gha*_*ani 7 c# asp.net-mvc multipartform-data asp.net-web-api

我有ASP.NET MVC webapplication我添加了webapi webServvices.

我有以下javascript代码.

var data = new FormData();
data.append("filesToDelete", "Value");

$.ajax({    
    type: "POST",
    url: "/api/FileAttachment/UploadFiles?clientContactId=" + clientContactId,
    contentType: false,
    processData: false,
    data: data,
    success: function (result) {
        // Do something
    },
    error: function (xhr, status, p3, p4) {
        // Do something
    }
});
Run Code Online (Sandbox Code Playgroud)

以下是WebApi代码:

public void UploadFiles(int clientContactId) {
    if (!Request.Content.IsMimeMultipartContent()) {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    var jsonContent = Request.Content.ReadAsStringAsync().Result;
}
Run Code Online (Sandbox Code Playgroud)

现在如何根据从javascript FormData传递的键值对读取jsonContent?

我试过jsonContent 但它需要特殊的类型来反序列化.

我希望获得传递给javascript FormData的关键"filesToDelete"的价值.

怎么看?

谢谢

小智 7

我会做的是:

客户端:而不是在查询字符串中传递clientContactId.在FormData对象本身中附加键值对.将dataType设置为JSON.

var data = new FormData();
data.append("filesToDelete", "Value");
data.append("clientContactId", 
(clientContactId != undefined || clientContactId != null) ? clientContactId : ''));

$.ajax({
        type: "POST",
        url: "/api/FileAttachment/UploadFiles",
        /* ONLY IF YOU ARE UPLOADING A FILE
        contentType: false,
        processData: false, */
        dataType: "JSON"
        data: data,
        success: function (result) {

        },
        error: function (xhr, status, p3, p4) {


        }
    });
Run Code Online (Sandbox Code Playgroud)

服务器端:在服务器端,我们可以使用获取原始请求 HttpContext.Current.Request.

因此,我们可以通过简单地使用FormData对象内部的键值来获取值HttpContext.Current.Request.Params["KeyValue"].

[HttpPost]
public void UploadFiles()
{
     var filesToDelete = HttpContext.Current.Request.Params["filesToDelete"];
     var clientContactId= HttpContext.Current.Request.Params["clientContactId"];

     //Your code here...
}
Run Code Online (Sandbox Code Playgroud)


And*_*lan 0

如果您想像这样使用 JSON 发送数据,您应该在 C# 中定义一个模型,该模型与您在 JSON 中传回的模型相匹配。您的 WebApi 控制器方法将如下所示:

    public HttpResponseMessage Post([FromBody]WorkerAbsenceModel absence)
    {
        bool ok = svc.CreateWorkerAbsence(absence);
        if (ok)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }

        return Request.CreateResponse(HttpStatusCode.BadRequest);
    }
Run Code Online (Sandbox Code Playgroud)