如何从 jQuery ajax 调用将复杂对象传递给 ASP.NET WebApi GET?
Posted
技术标签:
【中文标题】如何从 jQuery ajax 调用将复杂对象传递给 ASP.NET WebApi GET?【英文标题】:How to pass complex object to ASP.NET WebApi GET from jQuery ajax call? 【发布时间】:2013-03-26 16:50:24 【问题描述】:我在 javascript 中有以下复杂对象,其中包含过滤器选项
var filter=caseIdentifiter:'GFT1',userID:'2';
我想将其传递给 ASP.NET MVC4 WebApi 控制器 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;
使用 jQuery ajax 调用
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 控制器方法中的“filter”对象为“null”。如果我将其更改为 POST,则过滤器对象将正确传递。有没有办法将复杂对象传递给 GET?
我不想将 URL 的参数分开,因为会有很多参数会使其效率低下,很难有可选参数,这样即使有新参数,方法签名也会保持不变已添加。
【问题讨论】:
这里给出的答案解决了我遇到的同类问题。 ***.com/questions/15622852/…> 【参考方案1】:找到这个 *** 问题/答案后
Complex type is getting null in a ApiController parameter
控制器方法的 [FromBody] 属性必须是 [FromUri],因为 GET 没有主体。在此更改之后,“过滤器”复杂对象被正确传递。
【讨论】:
【参考方案2】:如果您将 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;
【讨论】:
没有冒犯,但这看起来很老套,很难测试以上是关于如何从 jQuery ajax 调用将复杂对象传递给 ASP.NET WebApi GET?的主要内容,如果未能解决你的问题,请参考以下文章
通过jQuery ajax调用将值列表传递给django视图
如何使用 jQuery 和 ASP.NET MVC 从 AJAX 调用返回错误消息?
如何使用 AJAX (jquery) 将嵌套的对象数组传递和接收到 c# WebMethod 中?