它不起作用,因为命名元组名称不太“真实”,它主要是编译器提供的语法糖。如果你看ValueTuple
一组类型,通过它们表示命名元组,您将看到它们具有如下属性Item1
, Item2
等等。
编译器会将所有对命名元组名称的引用重写为它们的真实名称(Item1
ETC)。例如你有这个:
static void Create((string username, string password) usernameAndPassword) {
Console.WriteLine(usernameAndPassword.username);
Console.WriteLine(usernameAndPassword.password);
}
但是当你编译它时,你真正得到的是:
static void Create([TupleElementNames(new string[] {"username", "password"})] ValueTuple<string, string> usernameAndPassword)
{
Console.WriteLine(usernameAndPassword.Item1);
Console.WriteLine(usernameAndPassword.Item2);
}
您的名字现在仅出现在元数据属性中TupleElementNames
,但不在代码中。
因此,当您发布类似以下内容时:
{"username": "x", "password": "y"}
对于您的操作,asp.net 无法绑定。但如果你发帖:
{"item1": "x", "item2": "y"}
然后它就会毫无问题地绑定。您可能可以编写自定义活页夹,它可以使用TupleElementNames
属性,但没有理由真的。只需按照评论中的建议使用单独的参数或真实模型即可。您的操作输入参数不是一次性的东西。您稍后可能想要验证它们、从模型生成文档等等。