Недопустимая длина массива символов Base-64 или строки в веб-методе asp.net

#c# #asp.net #image #byte #tobase64string

Вопрос:

Я преобразую изображение из строки с помощью FromBase64String в asp.net C#, но в то время он показывал ошибку заголовка в веб-методе.

Вот мой код,

 [WebMethod]
public static List<CustomerMortgageModel> GetProductList()
{
    string constr = ConfigurationManager.ConnectionStrings["connection"].ConnectionString;

    List<CustomerMortgageModel> customers = new List<CustomerMortgageModel>();
    Service service = new Service();

    using (SqlConnection con = new SqlConnection(constr))
    {
        string qrySelProductDetail = "select * from tbl_MortageDetail "   System.Environment.NewLine;
        
        using (SqlCommand cmd = new SqlCommand(qrySelProductDetail, con))
        {
            con.Open();
            using (SqlDataReader sdr = cmd.ExecuteReader())
            {
                while (sdr.Read())
                {
                    byte[] bytes = Convert.FromBase64String(sdr["DesignImage"].ToString());
                    System.Drawing.Image image;
                    using (MemoryStream ms = new MemoryStream(bytes))
                    {
                        image = System.Drawing.Image.FromStream(ms);
                    }

                    customers.Add(new CustomerMortgageModel
                    {
                        DesignImage = image.ToString()
                    });
                }
            }
            con.Close();
        }
        
    }
    return customers;
}
 

Ошибка, исходящая из этой строки

байт[] байт = Преобразовать.FromBase64String(sdr[«Образ конструкции»].toString());

Ответ №1:

использовать

 var base64Img = (string)sdr["DesignImage"];
if (string.IsNullOrEmpty(base64Img))
{
    throw new ArgumentException("'DesignImage' is null or empty");
}
byte[] bytes = Convert.FromBase64String(base64Img);
 

таким образом, вы будете уверены в типе столбца и в том, что строка не пуста, если вы все еще получаете ошибку при «Convert.FromBase64String», невозможно найти проблему, не имея образца недопустимого содержимого base64 (но вставьте его сюда, только если он не содержит личных данных).

Комментарии:

1. Я не думаю, что это решение, просто вы добавили нулевое условие, которое является выходом.

2. чтобы иметь реальное решение, вы должны предоставить реальные данные 🙂 в любом случае условие не выполняется, оно предупредит вас об исключении, если столбец не является типом sql, сопоставленным со строкой c#, или если он содержит пустую или пустую строку, чтобы вы могли удалить эти крайние случаи. ваш код sdr[«Образ дизайна»]. Функция toString() не выдаст никакой ошибки, например, если столбец содержит дату