如果我们需要发送项目列表,想要了解处理用例的C#ASP.NET Webapi的方法。
通过Get方法,我们将无法通过JSON发送数据,因为Get不接受HttpBody。提到了以下方法:
处理此问题的标准方法是什么?
答案 0 :(得分:0)
这取决于将发送哪种数据。如果要发送非复杂类型的列表,可以使用GET
;
[HttpGet]
public int GetSampleItems(int[] listOfItems)
{
return listOfItems.Length;
}
example.com/GetSampleItems?listOfItems=1&listOfItems=2&listOfItems=3
如果您要发送复杂类型,则应使用POST
代替GET
。
[HttpPost]
public int GetSampleItems(List<SampleItem> sampleItems)
{
return sampleItems.Length;
}
public class SampleItem
{
public string Item { get; set; }
}
输入应该在json
格式的请求体内;
[
{
"Item":"a"
},
{
"Item":"b"
},
{
"Item":"c"
}
]
答案 1 :(得分:0)
首先,让我说I.M.O.你应该只使用一个带有身体的帖子,因为我会告诉你的解决方案不是很“好”。
您可以将对象序列化为字符串,将其发送到url中并在API中反序列化。您必须为双方发送的对象提供完全相同的模型。
这是你如何做到的:
前端部分
[HttpGet("{stringName}")]
public Task<IActionResult> MethodName(string stringName)
{
var object = JsonConvert.Deserialize<ObjectModel>(stringName);
}
WEB API控制器
================ Certificate 0 ================
Serial Number: 039de8
Issuer: E=test-support@test.de, CN=test-CA, OU=testou, O=test GmbH, L=Ber
lin, S=Berlin, C=DE
NotBefore: 08.01.2018 11:10
NotAfter: 08.01.2019 11:10
Subject: C=DE, S=Berlin, L=Berlin, OU=Testou, O=test, CN=test-1.test.tc
Non-root Certificate
Template:
Cert Hash(sha1): ea 61 42 ad 80 eb b7 94 b0 fb 90 90 39 ce 44 6e a9 ee f4 1b
Key Container = {DE49D597-C00C-4433-9619-506FD234FF81}
Unique container name: 73ab698919e3dcc47cad8c7543f78ff0_ae268432-4b90-4c10-adf
e-8c743fdedffa
Provider = Microsoft Enhanced Cryptographic Provider v1.0
Private key is NOT exportable
Encryption test passed
================ Certificate 1 ================
Serial Number: 0a4cd4
Issuer: E=test-support@bdr.de, CN=test-CA, OU=testou, O=test GmbH, L=Ber
lin, S=Berlin, C=DE
NotBefore: 05.01.2018 10:07
NotAfter: 05.01.2019 10:07
Subject: C=DE, S=Berlin, L=Berlin, OU=testou, O=test, CN=test-2.test.tc
Non-root Certificate
Template:
Cert Hash(sha1): b2 49 95 e1 5c 47 4a 75 5c 1a 68 59 eb 26 05 bc 43 43 0e e9
Key Container = {A4F9D180-3391-4D9F-855A-6BD5457CF719}
Unique container name: 2b06a7fd8659046a8520a72ee921f2e9_ae268432-4b90-4c10-adf
e-8c743fdedffa
Provider = Microsoft Enhanced Cryptographic Provider v1.0
Private key is NOT exportable
Encryption test passed
CertUtil: -store command completed successfully.
虽然我提供了解决您问题的方法,但我不建议这样做,只建议使用POST。
编辑:
你说使用POST方法是针对REST的,你能详细说明吗?我发现的第一个REST API是twitter([class.mfct.non-static]/2),包含GET和&amp; POST方法。
答案 2 :(得分:0)
POST用于创建资源。如果您没有创建资源,请不要使用POST。 GET用于阅读资源。如果您正在阅读资源,请使用GET。假设您正在读取资源,您可以将列表作为以逗号或其他方式分隔的查询字符串参数发送,并使用custom model binder将其反序列化为您需要的任何对象。