将复杂对象传递给类型 "GET" 的 Web API



我实际上是在尝试将复杂对象传递给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);
    }
}

谢谢大家的回答

最新更新