如何通过AJAX调用将参数传递给GET WebApi端点?

时间:2018-12-10 16:57:02

标签: ajax asp.net-web-api get

我有一个GET WebApi端点,该端点是我的MVC应用程序的一部分,我想使用该端点来处理发送给它的一些数据,并通过jQuery AJAX调用完成该数据的发送。

但是,在通过AJAX调用传递所需的参数时遇到了一些麻烦。目前,我正在将所需的所有参数编译为一个对象,使用JSON.stringify()将参数转换为字符串,然后将其作为数据发送。

这里还有其他我想念的东西吗?如果我正在执行POST,则可以很好地传递这些参数,但是我想避免这种情况,因为我的端点不负责插入或更新任何数据。

下面是我用于WebApi端点和AJAX调用的代码。

WebApi端点:

方法:

[HttpGet]
[Route("api/services/getservices")]
public IHttpActionResult GetServices(ServiceViewModel vm)
{
    return Ok(Request);
}

课程:

public class ServiceViewModel
{
    public ServiceModel service { get; set; }
}

public class ServiceModel
{
    public string thing1 { get; set; }
    public string thing2 { get; set; }
    public string thing3 { get; set; }
    public string thing4 { get; set; }
}

AJAX:

var thing1 = $("#thing1").find(":selected").attr("program-id");
var thing2 = $("#thing2").val();
var thing3 = $("#thing3").val();
var thing4 = $("#thing4").val();
var obj = {
    thing1: thing1, 
    thing2: thing2, 
    thing3: thing3, 
    thing4: thing4 
};
obj = { "service": obj };
$.ajax({
    contentType: "application/json",
    url: "/api/services/getservices",
    type: "GET",
    data: JSON.stringify(obj),
    cache: false,
    success: function (data) {
        console.log(data);
        console.log("got here");
        serviceTable(data);
    },
    error: function () {
        servicEngineService.getProgramServices(programId, generateServiceTable, getProgramServicesFailure);
    }
});

1 个答案:

答案 0 :(得分:1)

您应该使用:

data: {
    thing1: thing1, 
    thing2: thing2, 
    thing3: thing3, 
    thing4: thing4 
};

它们将在查询字符串中传递,因此请注意不要太长。

正如Nkosi所说,GET请求没有正文。如果查询字符串的时间过长,即使后端不会修改数据,也应使用POST。