客户端正在使用DataTables来实现UI。我正在构建一个C#WebApi后端(适用于IIS / Azure的完整.NET框架)。在大多数情况下,事情排成一行 - 主要是json请求,除了一个案例。前端想要删除一批记录,并使用application / x-www-form-urlencoded正文将请求表示为HTTP DELETE,其中包含标识要删除的记录的信息。 WebApi应该能够处理表单编码,但在这种情况下,ApiController方法似乎没有任何可用的主体。 FWIW,原始请求主体的样本如下所示:
行动=删除&安培;数据%5B4%5D%5BID%5D = 4和;数据%5B4%5D%5BCDID%5D = 1&安培;数据%5B4%5D%5BTitle%5D =白色+狼&安培;数据%5B4%5D %5BLengthSeconds%5D = 215安培;数据%5B5%5D%5BID%5D = 5&安培;数据%5B5%5D%5BCDID%5D = 1&安培;数据%5B5%5D%5BTitle%5D =平静+淀数据%5B5%5D %5BLengthSeconds%5D = 296&安培;数据%5B6%5D%5BID%5D = 6&安培;数据%5B6%5D%5BCDID%5D = 1&安培;数据%5B6%5D%5BTitle%5D =蓝色+天空和安培;数据%5B6%5D %5BLengthSeconds%5D = 307
...解码和播放的URL看起来像这样:
动作:除去
数据[4] [ID]:4
数据[4] [CDID]:1
数据[4] [标题]:白狼
数据[4] [LengthSeconds]:215
数据[5] [ID]:5
数据[5] [CDID]:1
数据[5] [标题]:平静的湖泊
数据[5] [LengthSeconds]:296
数据[6] [ID]:6
数据[6] [CDID]:1
数据[6] [标题]:蓝天
数据[6] [LengthSeconds]:307
我尝试了各种方法签名来尝试获取内容,例如:
public void Delete([FromBody] Dictionary<string,object> myData)
public void Delete([FromBody] Dictionary<string,string> myData)
public void Delete([FromBody] string[] myData)
public void Delete([FromBody] FormUrlEncodedContent myData)
但myData
始终为null或空,await Request.Content.ReadAsStringAsync()
生成空字符串。
理想情况下,我希望将正文反序列化为一个对象数组,每个对象代表一个要删除的项目(上面示例中的3个项目)。
这是我的代码问题(我该如何修复)?
这是WebApi框架的问题(限制)吗?
这是DataTables的一个问题(一个错误)吗?
这是在客户端使用DataTables的方式的问题(必须采取哪些措施来纠正它)?
答案 0 :(得分:0)
使用:
lastActivity
请注意:
public void Delete([FromBody] FormDataCollection myData)
是FormDataCollection
,因此对于给定的示例,键将是&#34; action&#34;,&#34; data [4] [ID]&#34;, &#34;数据[4] [CDID]&#34;等
因为&#34; [ID]&#34;值是唯一感兴趣的项目(只需要标识要删除的项目,其余的可以忽略),可以执行以下操作将它们提取为可枚举:
IEnumerable<KeyValuePair<string, string>>