2016-11-25 23 views
3

我有ASP.NET MVC的web应用程序我有webapi webServvices添加到它。如何读取FormData到Web API

我有以下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) { 

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


      } 
     }); 

以下是的WebAPI代码:

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


      var jsonContent = Request.Content.ReadAsStringAsync().Result; 




     } 

现在如何基于JavaScript中FORMDATA通过键值对读取jsonContent?

我试图JsonConvert.DeserializeObject<?>,但它需要反序列化到特定类型。

我想获得传递到JavaScript FormData的关键“filesToDelete”的值。

如何阅读?

感谢

+0

添加参数'[FromBody]字符串filesToDelete'到你的方法假设你真的是传递一个字符串 –

回答

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

获得“filesToDelete”值,你可以使用JSON.NET。验证码:

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

      JObject jObject = JObject.Parse(jsonContent); 
      var filesToDelete = jObject["filesToDelete"];  
     } 
0

您可以创建dynamic对象

dynamic data = JsonConvert.DeserializeObject(jsonContent); 

,那么你可以访问filesToDelete

data.filesToDelete; 
0

我觉得从ASP.NET网站本教程可能是你是什么寻找:

Sending HTML Form Data in ASP.NET Web API: Form-urlencoded Data

根据您的示例代码,我不确定您是需要表单数据中的复杂类型还是基于API控制器中UploadFiles(int clientContactId)方法的单个整数。签名使您看起来像只是试图传递一个整数。如果是这样的话,你的API控制方法看起来是这样的:

[HttpPost] 
public void UploadFiles(int clientContactId) 
{ 
    //access the 'clientContactId' input parameter 
    int id = clientContactId; 
} 

而且你的AJAX调用会是这个样子:

$.ajax({ 
    url: '/api/controller/UploadFiles', //your app url 
    type: 'POST', 
    data: { clientContactId: 12345 }, 
    dataType: 'json', 
    success: function (result) { 
     //do whatever 
    }, 
    error: function (result) { 
     //do whatever 
    } 
}); 

如果您已经在数据格式为JSON你JavaScript,你可以在请求的主体中发送它。在控制器方法可以是这个样子:

[HttpPost] 
public void UploadFiles([FromBody] MyComplexType input) 
{ 

} 

而且你的AJAX调用可能看起来像:

$.ajax({ 
    url: '/api/controller/UploadFiles', //your app url 
    type: 'POST', 
    data: JSON.stringify(input), 
    dataType: 'json', 
    success: function (result) { 
     //do whatever 
    }, 
    error: function (result) { 
     //do whatever 
    } 
}); 

退房我挂上面,虽然本教程中,我认为可以解释的东西好一点为你。

3

我会做的是:

客户端:不是传递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) { 


     } 
    }); 

服务器端:在服务器端,我们可以得到使用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... 
} 
+0

请添加有关为什么您认为这个代码回答了这个问题的一些解释(只是显示没有与此相关的解释代码被认为是低质量答案)。 –