c# - 使用 BindAttribute 的 Prefix 属性绑定(bind)到单个参数

标签 c# asp.net-mvc asp.net-core model-binding

我正在尝试将 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/

相关文章:

c# - Linq 选择最高 ID,其中 ID 是字母数字

asp.net-mvc - MVC 4 限制所有操作/ Controller ,除非管理员或角色/用户允许

c# - 如何从 IActionResult 中提取列表

asp.net-mvc - 避免在业务层使用 SelectList (MVC 3)

c# - 验证 base64 编码图像 .NET 核心

.net - 使用 JSON API .Net Core 添加元数据中的总数

c# - 从 Microsoft Groove 音乐应用程序获取当前播放轨道信息

c# - 处理动态(运行时)控件的事件 - VB.NET

c# - 从库中获取应用程序的版本号

c# - 使用 Rotativa 会导致 'Could not load file or assembly' 错误