Как передать ошибку из TypeConverter в ошибки ModelState - PullRequest
0 голосов
/ 25 февраля 2020

Я реализовал TypeConverter для десериализации типа из строки в запросе.

Тип содержит Guid и Guid в строке может быть недопустимым, поэтому я хочу передать ошибку в ModelState.

Я пытаюсь throw new ArgumentException("my message"), и это работает, но сообщение об ошибке из исключения не передается ModelError.ErrorMessage. Есть ли способ передать сообщение об ошибке в ModelError.ErrorMessage или я могу получить сообщение только от ModelError.Exception.Message?

1 Ответ

0 голосов
/ 27 февраля 2020

Хорошо, я понимаю, что вы пытаетесь сделать.

Поскольку встроенный ModelBinder будет захватывать внутреннее исключение FormatException, чтобы установить ModelError.ErrorMessage, мы можем сгенерировать (или перебросить) новое исключение FormatException. Например,

public class MyConverter : TypeConverter
{
    ...

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        if (value is string)
        {
            try{
                ... 
                return new MyClass(x);
            }
            <b>catch(Exception e){                 </b>
            <b>    throw new FormatException("Ouch: sth happens");</b>  // throw a FormatException
            <b>}</b>
        }
        return base.ConvertFrom(context, culture, value);
    }
    ...

Подробнее см. исходный код :

...