我有两个动作
[HttpPost("MyFromForm")]
public async Task<IActionResult> MyFromForm([FromForm] RequestExample request)
{
return new OkObjectResult(request);
}
[HttpPost("MyFromBody")]
public async Task<IActionResult> MyFromBody([FromBody] RequestExample request)
{
return new OkObjectResult(request);
}
该类只包含一个Dictionary类型的属性
public class RequestExample
{
public Dictionary<string, string> DeviceDetails { get; set; }
}
请求
{
"deviceDetails": {
"additionalProp1": "string",
"additionalProp2": "string",
"additionalProp3": "string"
}
}
如果我使用swagger将数据发送到这些方法,具有FromBody的方法正在工作,但具有FromForm的方法不工作。
- 使用:FromBody*,我能够接收请求
中的字典 - 使用:FromForm*,我无法接收请求
中的字典
**问题:**为什么我无法接收FromForm类型请求中的对象?
3条答案
按热度按时间pjngdqdw1#
看起来您没有更改请求主体类型。
FromForm
属性用于从内容类型application/x-www-form-urlencoded
发送的提交表单中传入的数据,而FromBody
将以默认方式解析模型,在大多数情况下,content-type application/json
从请求主体Read this for more发送。尝试更改它,最好使用Postman。nkoocmlb2#
您没有发送有效的X FORM URL编码数据:
举个例子
你正在尝试发送一个json字符串作为一个表单字典.
表单编码的值应该用与号分隔,键或值上不带引号。
另外,使用multipart/form-data不是发送表单数据,至少一般来说不是。multipart/form-data用于上载文件或二进制数据,而不是文本字段。
您应该使用**-d代替-F和内容类型:应用程序/x-www-表单-网址编码而不是多部分/表单-数据**
ssm49v7z3#
由于要通过JSON,请执行以下操作:变更
到