使用 BindAttribute 的 Prefix 属性 绑定到单个参数

Using Prefix property of BindAttribute to bind to single parameter

我正在尝试将 URL 查询的单个参数绑定到操作方法中的单个 属性。

URL 的思路是:

/user/validate?Some.Prefix.Username=MyUserName

我的控制器和操作方法是这样的:

public class UserController : Controller
{
    public IActionResult Validate([Bind(Prefix = "Some.Prefix")]string username)
    {
        return Ok(username);
    }
}

然而,调用此操作方法时,username 参数始终为 null。这似乎是将 BindAttribute 与字符串参数一起使用的结果,而不是简单的 class 参数。如果我用包含 Username 属性 的简单 class 替换 string username 参数,我可以按预期捕获值。

public class UserController : Controller
{
    public IActionResult Validate([Bind(Prefix = "Some.Prefix")]ValidationModel model)
    {
        return Ok(model);
    }
}

public class ValidationModel
{
    public string Username { get; set; }
}

当 URL 参数名称包含前缀时,是否有任何方法可以绑定到单个参数(而不是 class 参数)?

对于像 int 和 string 这样的简单类型,绑定前缀会覆盖参数的模型名称。以您的操作方法为例,DefaultModelBinder 将查找名称 "Some.Prefix" 而不是 "username".

因此,如果您想解决此问题并且不需要复杂类型,则需要指定完全限定名称。

public IActionResult Validate([Bind(Prefix = "Some.Prefix.Username")]string username)