Использование свойства префикса BindAttribute для привязки к одному параметру - PullRequest
1 голос
/ 26 апреля 2020

Я пытаюсь привязать один параметр 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 всегда пусто, когда вызывается этот метод действия. Похоже, это результат использования BindAttribute со строковым параметром, а не простого параметра класса. Если я заменим параметр string username на простой класс, содержащий свойство 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 содержит префиксы?

1 Ответ

1 голос
/ 27 апреля 2020

Для простых типов, таких как int и string, префикс привязки переопределяет имя модели для параметров. Используя ваш метод действия в качестве примера, DefaultModelBinder будет искать имя «Some.Prefix» вместо «username».

Итак, если вы хотите обойти это и не требовать сложного типа, вы необходимо указать полное имя.

public IActionResult Validate([Bind(Prefix = "Some.Prefix.Username")]string username)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...