Я пытаюсь добавить логику проверки для параметра строки запроса, но продолжаю спотыкаться об этом предупреждении.
Предупреждение MVC1004 Свойство типа CountryCode имеет то же имя, что и параметр countrycode. Это может привести к неправильной привязке модели. Рассмотрите переименование параметра или использование атрибута привязки модели для переопределения имени.
Со ссылкой на документы Microsoft
В результате: привязка модели не удалась.
Позвольте мне показать вам случай:
Обычно я пытаюсь применить логику проверки к параметру строки запроса HttpGet
, простой тип которого string
.
Итак, моя первоначальная мысль заключалась в том, чтобы обернуть параметр в классе и добавить некоторые неявные преобразования, чтобы его было легко использовать.
Тип - CountryCode
, и, как сказано, простой базовый тип - string
.
Идея состоит в том, чтобы назвать это так:
http://example.org? COUNTRYCODE = EU
Вот код страны:
public class CountryCode
{
[FromQuery(Name = "countryCode")]
[Required]
[RegularExpression("^[A-Z]{2}$")]
public string Value { get; set; }
public static implicit operator string(CountryCode countryCode)
{
return countryCode.Value;
}
public static implicit operator CountryCode(string countryCode)
{
return new CountryCode()
{
Value = countryCode
};
}
}
Итак, следующий шаг - использовать его в контроллере:
public IActionResult Get(CountryCode countryCode)
{
if (!ModelState.IsValid)
return BadRequest("list errors");
//logic here
return Ok();
}
На самом деле это выглядело очень многообещающе, если бы не всплыло предупреждение, а фактическая привязка не удалась, что привело к null
для значения.
Но
затем, если я изменю имя параметра, используемого в действии:
public IActionResult Get(CountryCode foo)
или изменить имя в атрибуте FromQuery
:
[FromQuery(Name = "foo")]
public string Value { get; set; }
Все отлично работает.
Теперь моя цель - использовать countryCode
, а также имя параметра строки запроса и имя параметра метода C #, сохранить проверку атрибута и неявное приведение к строке.
Есть ли способ сделать это?
Я попробовал пару вещей:
- возился с именами
- пытался использовать
[BindAttribute]
, [FromQuery]
, [ModelBinderAttribute]
- переименован
Value
в реальное имя
- использовал
snake_case
для country_code
(это работает), но не поможет мне с такими свойствами, как day
(я пытаюсь использовать это как шаблон)
- пользовательское связующее (надеюсь, мне не нужно)
- еще немного
но я не помог. Вы можете мне помочь?