Вместо использования пользовательского ModelBinder вы также можете использовать пользовательский тип с TypeConverter.
[TypeConverter(typeof(StrListConverter))]
public class StrList : List<string>
{
public StrList(IEnumerable<string> collection) : base(collection) {}
}
public class StrListConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
return sourceType == typeof(string) || base.CanConvertFrom(context, sourceType);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
if (value == null)
return null;
if (value is string s)
{
if (string.IsNullOrEmpty(s))
return null;
return new StrList(s.Split(','));
}
return base.ConvertFrom(context, culture, value);
}
}
Преимущество состоит в том, что он делает параметры метода Web API очень простыми. Вам даже не нужно указывать [FromUri].
public IEnumerable<Category> GetCategories(StrList categoryIds) {
// code to retrieve categories from database
}
Этот пример для списка строк, но вы можете сделать categoryIds.Select(int.Parse)
или просто написать IntList вместо этого.
Я наткнулся на этот вопрос, пытающийся добираться эти organization/repo
строка от хоста мерзавца как GitHub или gitlab.
Это работает на меня:
git config --get remote.origin.url | sed -e 's/^git@.*:\([[:graph:]]*\).get/\1/'
Это использует sed
для замены вывода эти git config
команда только с организацией и именем repo.
Что-то как github/scientist
было бы подобрано классом символов [[:graph:]]
в регулярном выражении.
Эти \1
говорит sed заменять все просто подобранными символами.