因此,从本质上讲,我正在构建Web API,并且尝试使用ajax查询接受两个参数的Web服务。我需要传递一个字符串列表(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对象放入data参数中吗?我也听说过我可以传递一个c-sharp对象,但是如果我尝试这样做,那么当我进入Razor代码时,我将无法访问html变量。
@{ 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
}
谢谢大家。
首先,为要发送的数据创建一个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 :)
});
这是一篇详细解释将客户端数据发送到Web api的不同选项的文章。
我对url变量的值进行了硬编码。你应该考虑使用HTML辅助方法,如Url.Action
在解释产生对你的应用程序端点正确的相对路径这一职位。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句