我正在尝试将 URL 查询的单个参数绑定(bind)到操作方法中的单个属性。
URL 的内容如下:
/user/validate?Some.Prefix.Username=MyUserName
我的 Controller 和操作方法是这样的:
public class UserController : Controller
{
public IActionResult Validate([Bind(Prefix = "Some.Prefix")]string username)
{
return Ok(username);
}
}
但是,调用此操作方法时,username
参数始终为 null。这似乎是使用带有字符串参数的 BindAttribute 的结果,而不是简单的类参数。如果我用包含 Username
属性的简单类替换 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 参数名称包含前缀时,有什么方法可以绑定(bind)到单个参数(而不是类参数)?
最佳答案
对于 int 和 string 等简单类型,绑定(bind)前缀会覆盖参数的模型名称。以您的操作方法为例,DefaultModelBinder 将查找名称“Some.Prefix”而不是“用户名”。
因此,如果您想解决此问题并且不需要复杂类型,则需要指定完全限定名称。
public IActionResult Validate([Bind(Prefix = "Some.Prefix.Username")]string username)
关于c# - 使用 BindAttribute 的 Prefix 属性绑定(bind)到单个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61447596/