我试图向我的控制器发送以下JSON:
[
{
"collection": "col1",
"uuid": [
"11:22:33:44:55:66",
"11:22:33:44:55:66"
]
},
{
"collection": "test"
}
]每个对象“集合”都包含一个由uuid符号表示的字符串列表。
我的模型看起来是这样的:
public class DummyDeviceApiModel {
[Display(Name = "UUID")]
[StringLength(36)]
public List<string> uuid {get; set;}
[Display(Name = "Collection")]
public string collection {get; set;}
}我的控制器是这样的:
public async Task<ActionResult<DummyDeviceModel>> PostCreateDummyDevice(List<DummyDeviceApiModel> ddpm)当我只发送集合部分,但是UUID及其列表会产生问题:
无法将'System.Collections.Generic.List`1System.String‘类型的对象强制转换为“System.String”类型
。
知道我做错了什么吗?问题似乎是模型中的“第二个”清单。
谢谢斯蒂芬恩
发布于 2020-09-30 18:41:29
[StringLength(36)]是string类型的验证属性,而不是arrays of string或List<string>。该异常可能发生在幕后,因为它试图对您的属性进行validate,因为它是List<string>类型的。如果您想做我认为要做的事情,请在列表上创建一个自定义验证,以确保列表中只有小于或等于36长度的字符串,那么您需要在模型(类)上实现IValidatableObject,或者通过创建继承自ValidationAttribute的类来创建用于验证的自定义Validation Attribute。您可以在MSDN:(https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation?view=aspnetcore-3.1)上阅读有关如何实现此接口和/或创建自定义属性的更多信息。为了测试抛出异常的是否确实是StringLength属性,请在代码中注释掉特定的Validation Attribute,并查看它是否没有错误地运行。
https://stackoverflow.com/questions/64143655
复制相似问题