我在请求有效负载中有一个Attachments
json数组,每个附件有三个属性:
Name
-字符串,保存要附加的文件的名称。
ContentType
- System.Net.Mime.ContentType并保存文件的媒体类型信息和
FileData
-字符串,保存base64编码的文件/附件的内容字符串。
每当ContentType
是null/empty
时,我看到控件甚至没有击中控制器,但API正在发送500 internal server error
,响应中的错误消息对客户端没有帮助:
Message: This property cannot be set to an empty string. (Parameter 'value')
是否有一种方法可以让API通过为该属性输入的任何值(ContentType
中的mediaType
),我想在API中对此属性进行验证,并抛出带有适当消息的400。下面是导致上述错误的请求正文:
"Attachments": [
{
"Name": "Something.txt",
"ContentType": {
"Boundary": null,
"CharSet": null,
"MediaType": "", //this is causing the above error and I would like this one to be a bad request not a internal server error.
"Name": "SampleContentType",
"Parameters": [
{
"Key": "name",
"Value": "SampleContentType"
}
]
},
"FileData": "some base64 encoded string here"
}
]
对此的一个解决方案是使用一个自定义的ContentType模型,它模仿正在使用的模型,做验证然后将其映射到原始模型,但我想了解为什么API在它甚至击中控制器之前抛出500。
使用ConsumesAttribute
让框架检查。
[Consumes("multipart/form-data")] // example
public async Task<IActionResult> MyAction { ... }
如果不满足Consumes
条件,默认将返回415。