2013-04-04 84 views
32

我在JavaScript中有下列複雜的對象包含過濾選項如何將複雜對象傳遞給ASP.NET WebApi從jQuery ajax調用GET?

var filter={caseIdentifiter:'GFT1',userID:'2'}; 

,我想傳遞給ASP.NET MVC4的WebAPI控制器使用jQuery的Ajax調用

GET

[HttpGet] 
public IEnumerable<JHS.Repository.ViewModels.CaseList> Get([FromBody]Repository.InputModels.CaseListFilter filter) 
{ 
    try 
    { 
    return Case.List(filter); 
    } 
    catch (Exception exc) 
    { 
    //Handle exception here... 
    return null; 
    } 
} 

var request = $.ajax({ 
    url: http://mydomain.com/case, 
    type: 'GET', 
    data: JSON.stringify(filter), 
    contentType: 'application/json; charset=utf-8', 
    cache: false, 
    dataType: 'json' 
}); 

ASP.NET控制器方法中的「過濾器」對象爲「null」。如果我將它更改爲POST,則過濾器對象正確傳遞。有沒有辦法將一個複雜的對象傳遞給GET?

我不想將參數分離出來,因爲會有一些參數會導致效率低下,很難有可選參數,這樣即使新建了方法簽名也會保持不變參數被添加。

+0

這裏給出的答案解決了我所遇到的同類問題。 2016-09-08 06:30:48

回答

4

如果將json數據附加到查詢字符串,並稍後在web api端解析它。你可以解析複雜的對象。這很有用,而不是發佈json對象樣式。這是我的解決方案。

//javascript file 
var data = { UserID: "10", UserName: "Long", AppInstanceID: "100", ProcessGUID: "BF1CC2EB-D9BD-45FD-BF87-939DD8FF9071" }; 
var request = JSON.stringify(data); 
request = encodeURIComponent(request); 

doAjaxGet("/ProductWebApi/api/Workflow/StartProcess?data=", request, function (result) { 
    window.console.log(result); 
}); 

//webapi file: 
[HttpGet] 
public ResponseResult StartProcess() 
{ 
    dynamic queryJson = ParseHttpGetJson(Request.RequestUri.Query); 
     int appInstanceID = int.Parse(queryJson.AppInstanceID.Value); 
    Guid processGUID = Guid.Parse(queryJson.ProcessGUID.Value); 
    int userID = int.Parse(queryJson.UserID.Value); 
    string userName = queryJson.UserName.Value; 
} 

//utility function: 
public static dynamic ParseHttpGetJson(string query) 
{ 
    if (!string.IsNullOrEmpty(query)) 
    { 
     try 
     { 
      var json = query.Substring(7, query.Length - 7); //seperate ?data= characters 
      json = System.Web.HttpUtility.UrlDecode(json); 
      dynamic queryJson = JsonConvert.DeserializeObject<dynamic>(json); 

      return queryJson; 
     } 
     catch (System.Exception e) 
     { 
      throw new ApplicationException("can't deserialize object as wrong string content!", e); 
     } 
    } 
    else 
    { 
     return null; 
    } 
} 
+4

沒有冒犯,但這看起來非常冒險,很難測試 – dotnetguy 2016-04-04 11:35:01

相關問題