Cic*_*ami 6 arrays ajax jquery serialization get
在我的 javascript 应用程序中,我尝试使用 jQuery Ajax 在 GET 请求中将字符串数组和其他参数传递给 ASP.NET Web API REST 服务。示例 URL 如下所示:
http://my.services.com/products?userId=1abc&id=1&id=2&id=3
Run Code Online (Sandbox Code Playgroud)
Web API 方法的签名:
[HttpGet("products")]
public IActionResult GetProducts(string userId, int[] id)
Run Code Online (Sandbox Code Playgroud)
如果我用 Postman 尝试请求,参数的绑定工作正常。在 Javascript 应用程序中,我尝试了几种解决方案,但都没有成功。代码如下:
let data = {
'userId': '1abc'
'id': [1,2,3]
}
$.ajax({
type: 'get',
url: 'http://my.services.com/products',
data: data,
crossDomain: true, //CORS
cache: false,
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,URL 变为:
http://my.services.com/products?userId=1abc&id%5B%5D=1&id%5B%5D=2&id%5B%5D=3
Run Code Online (Sandbox Code Playgroud)
因为在解析结果中而不是id用作键,它使用id[],因此将字符编码[]为%5B和%5D。
即使我使用此代码也没有运气:
let data = {
'userId': '1abc'
'id': JSON.stringify([1,2,3])
}
Run Code Online (Sandbox Code Playgroud)
或(如本答案所示)
let data = {
'userId': '1abc'
'id[]': [1,2,3]
}
Run Code Online (Sandbox Code Playgroud)
请记住,对于其他调用,上面的 JQuery AJAX 代码可以正常工作,没有任何问题。
Ror*_*san 11
请求的问题是因为默认的 ASP.Net 模型绑定器希望数组作为单独的键/值对通过查询字符串发送,如您的第一个示例 URL 所示。
要实现这一点,您只需traditional: true在 jQuery$.ajax()请求中进行设置:
let data = {
userId: '1abc'
id: [ 1, 2, 3 ]
}
$.ajax({
type: 'get',
url: 'http://my.services.com/products',
data: data,
traditional: true
});
Run Code Online (Sandbox Code Playgroud)
另外,作为旁注,在发出 AJAX 请求时要小心使用绝对 URL,如果不定期维护代码,您很容易遇到 CORS 问题。我建议尽可能使用相对路径。
| 归档时间: |
|
| 查看次数: |
6735 次 |
| 最近记录: |