gpt4 book ai didi

c# - 在 ASP.NET Core Web API Controller 中使用 C# 7 元组

转载 作者:可可西里 更新时间:2023-11-01 08:41:52 24 4
gpt4 key购买 nike

你知道为什么会这样吗:

public struct UserNameAndPassword
{
public string username;
public string password;
}


[HttpPost]
public IActionResult Create([FromBody]UserNameAndPassword usernameAndPassword)
{
Console.WriteLine(usernameAndPassword);
if (this.AuthenticationService.IsValidUserAndPasswordCombination(usernameAndPassword.username, usernameAndPassword.password))
return new ObjectResult(GenerateToken(usernameAndPassword.username));
return BadRequest();
}

但是当我用元组替换它时,这不起作用吗?

[HttpPost]
public IActionResult Create([FromBody](string username, string password) usernameAndPassword) //encrypt password?
{
Console.WriteLine(usernameAndPassword);
if (this.AuthenticationService.IsValidUserAndPasswordCombination(usernameAndPassword.username, usernameAndPassword.password))
return new ObjectResult(GenerateToken(usernameAndPassword.username));
return BadRequest();
}

usernameAndPassword.username.password 都是空的。

不允许在 Controller 中使用元组吗?

最佳答案

它不起作用,因为命名的元组名称不是很“真实”,它主要是编译器提供的语法糖。如果您查看 ValueTuple 类型集,命名元组由其表示,您将看到它们具有 Item1Item2 等属性上。

编译器会将您对命名元组名称的所有引用重写为它们的真实名称(Item1 等)。例如你有这个:

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 无法绑定(bind)。但是如果你要发帖:

{"item1": "x", "item2": "y"}

那么它就可以毫无问题地绑定(bind)了。您可能可以编写自定义 Binder ,它可以使用 TupleElementNames 属性,但没有理由真的这样做。只需按照评论中的建议使用单独的参数或真实模型。您的操作输入参数不是一次性的东西。您稍后可能想要验证它们、从模型生成文档等。

关于c# - 在 ASP.NET Core Web API Controller 中使用 C# 7 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50005989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com