基本上,我正在构建一个Web API,我试图使用ajax来查询接受两个参数的Web服务。我需要传递一个Stings列表(SSN),我需要传递一个字符串来确定它查询的环境。 (" a"用于接受," i"用于集成)。
我正在使用带有剃刀的cshtml。到目前为止,这一部分已经成功地向我提供了我想要的div。
var pInputSssns = document.GetElementById(“SSNinput”).value;
var pTestRegion = document.GetElementById(“testRegion’).value;
然而,就在它下面。我试图将这两个参数插入到ajax调用中。
$.ajax({
type: 'GET',
contentType: "application/json; charset=utf-8"
url: "myurl",
data:"{}",
success: function (data) {
// populate a table
}
});
我听说过如何做到这一点的多种意见。我可以将它们作为JSON序列化,然后在数据参数中放入两个JSON对象吗?我也听说过我可以传递一个尖锐的物体,但如果我尝试这样做,我就无法访问html变量而我在Razor代码中。
@{ AjaxParam ap = new AjaxParam(); ap.pInputSsns = pInputSsns;}
有没有一种好方法可以将它们都传递到那里?作为参考,这里是控制器:
[ScriptMethod (ResponseFormat = Response Format.Json)]
[System.Web.Http.HttpGet]
public JArray GetSSNAssociations([FromUri] List <string> pInputSsns, string pTestRegion)
{
\\ do something
}
欣赏每个人。
答案 0 :(得分:0)
首先,为要发送的数据创建一个DTO类。
public class SearchRequest
{
public List<string> SsnList { set; get; }
public string Environment { set; get; }
}
现在,在WebApi控制器中,Post方法将此类作为参数,以便在客户端发送请求时,默认模型绑定器将能够将请求值映射到此类对象的属性。
public class ProductsController : ApiController
{
public HttpResponseMessage Post([FromBody]SearchRequest req)
{
// I am simply returning the same object back. But you can do whatever you want
// Check req.SsnList and req.Environment properties and do something useful.
return Request.CreateResponse(HttpStatusCode.OK, req);
}
}
现在从客户端代码,您可以构建一个javascript对象,它重命名我们的DTO类的结构,并使用jQuery ajax发送它。
var model = { Environment: "I", SssList: ["375329567", "3583345"] };
var url="../api/products";
$.ajax({
type: "POST",
data: JSON.stringify(model),
url: url,
contentType: "application/json"
}).done(function (res) {
console.log('res', res);
// Do something with the result :)
});
Here是一篇文章,解释了将客户端数据发送到web api的不同选项。
我硬编码了url变量的值。您应该考虑使用Url.Action
等Html辅助方法生成应用端点的正确相对路径,如this post中所述。