【发布时间】:2018-10-04 23:15:52
【问题描述】:
你知道为什么会这样吗:
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 均为空。
你不允许在控制器中使用元组吗?
【问题讨论】:
-
很确定元组不会像那样工作,除非您编写自定义模型绑定器。你为什么想要这个,它的可读性要差得多?制作一个合适的类或只有两个参数。
-
就使用适当的类而言,这就是元组的部分设计目的 - 减少对丢弃类的需求,这些类会造成混乱。
-
但是这些不是一次性的类,在这种情况下代码看起来更糟。作为方法的返回类型,它看起来更具可读性,但不如参数。
-
我同意@DavidG。这里的缺陷在于将这些课程视为“一次性”。您绑定的类以创建合同并自行记录您的操作是如何工作的。它们绝不是“扔掉”。
-
你不能只有一个 FromBody 参数吗?元组的东西对于在体内有多个参数而不为它们创建一个类会有点好。对于查询参数和成熟的主体对象来说,这将是一个很好的中间点。
标签: c# asp.net-core tuples asp.net-core-webapi c#-7.0