使用 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)
我正在尝试将 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)