2016-11-25 64 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

請添加有關爲什麼您認爲這個代碼回答了這個問題的一些解釋(只是顯示沒有與此相關的解釋代碼被認爲是低質量答案)。 –