我实际上是在尝试将复杂对象传递给Web api。下面是我的代码:
.js
$("#btnFetch").live("click", function () {
var dualdata = { Code: "XXX", Module: "1" };
$.ajax({
cache: false,
url: fetchProfileUrl,
type: 'GET',
dataType: 'json',
data: JSON.stringify(dualdata),
contentType: "application/json;charset=utf-8",
success: function (data) {
WriteResponse(data);
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
网页接口
[HttpGet]
public HttpResponseMessage FetchProfile([FromUri]JObject inputParam)
{
try
{
dynamic m = inputParam;
var productCode = m.ProductCode.Value as string;
var result = GetExecutiveProfileData(productCode);
return Request.CreateResponse(HttpStatusCode.OK, result);
}
catch (Exception ex)
{
return HandleException(ex);
}
}
我在调试时通过 ajax 调用成功访问 api 方法 FetchProfile。但是,我没有在inputParam参数下获得通过ajax传递给Web api的值(即代码:"XXX"和模块"1")。我真的无法弄清楚我的结局缺少了什么。
谢谢
我已经找到了一种方法来摆脱我面临的问题。我创建了一个包含两个属性"Code"和"Module"的请求类,并将该类分配为 FetchProfile 方法的参数。以下是正常工作的更改:
var dualdata = { Code: "XXX", Module: "1" };
$.ajax({
cache: false,
url: fetchProfileUrl,
type: 'GET',
dataType: 'json',
data: dualdata,
contentType: "application/json,
success: function (data) {
WriteResponse(data);
},
error: function (xmlHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
网页接口
[HttpGet]
public HttpResponseMessage FetchProfile([FromUri]APIRequestParams request)
{
try
{
var result = GetProfileData(request.Code);
return Request.CreateResponse(HttpStatusCode.OK, result);
}
catch (Exception ex)
{
return HandleException(ex);
}
}
谢谢大家的回答