【问题标题】:How to pass parameters to GET WebApi endpoint via AJAX call?如何通过 AJAX 调用将参数传递给 GET WebApi 端点?
【发布时间】:2018-12-10 16:57:02
【问题描述】:

我有一个 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);
    }
});

【问题讨论】:

  • GET 请求没有 BODY。另一种选择是在查询字符串中发送数据,但在绑定到复杂对象时有其局限性。

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


【解决方案1】:

你应该使用:

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

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

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

【讨论】:

  • Web API中的参数也要使用FromUri进行参数绑定docs.microsoft.com/en-us/aspnet/web-api/overview/…
  • 我在我的参数列表中添加了[FromUri] 属性,并且一旦我在我的Action 方法中就能够看到一个对象存在,但是该对象上的所有属性都是空的。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多