值元组从WebAPI公开了错误的参数名称

时间:2019-06-17 19:27:54

标签: c# asp.net-web-api valuetuple

我正在使用Web API。我有点懒,决定从控制器返回一个值元组。

openssl

JSON响应似乎没有使用适当的命名方式吗?

[HttpGet]
[Route(AuthAPIRoutes.GET_MFA_DEVICES)]
public (string Type, string Value)[] GetMultiFactoryMethods()
{
    return GlobalFactory<IPaystreamMFASecurityService>.Instance.GetMultiFactorMethods();
}

注意::我知道我可以明确创建模型来避免此问题。我想了解发生了什么,为什么响应中不尊重我的值元组名称?

1 个答案:

答案 0 :(得分:5)

正在发生的事情是,ValueTuple作为一种类型(实际上是一组泛型类型)实际上是非常静态的,并且具有名为Item1Item2等事物的属性。

从C#获得的不错的语法,您可以在其中声明名称并在代码中的其他位置使用该名称,这只是C#语言的功能。按名称引用这些值的已编译代码最终调用了这些静态属性(例如,Item1)。实际上,您仍然可以通过自己的C#代码中的“项目”名称访问这些属性。

从编译代码的角度来看,有关这些元组上字段名称的唯一线索是与方法相关联的属性,因此,除非ASP.NET传递有关action方法的上下文信息进入序列化程序,序列化程序将无法知道这些属性应具有的名称。

请参阅this article,深入了解ValueTuples在幕后所做的事情。