سؤال

لدي شرط للتحقق من أن عنوان URL محدد المستخدم هو صورة. حقا أحتاج إلى وسيلة لتحديد سلسلة URL تشير إلى صورة صالحة. كيف يمكنني القيام بذلك في .NET؟

هل كانت مفيدة؟

المحلول 3

إليك ما أستخدمه الآن. أي انتقادات؟

public class Image
{
    public static bool Verifies(string url)
    {
        if (url == null)
        {
            throw new ArgumentNullException("url");
        }

        Uri address;

        if (!Uri.TryCreate(url, UriKind.Absolute, out address))
        {
            return false;
        }

        using (var downloader = new WebClient())
        {
            try
            {
                var image = new Bitmap(downloader.OpenRead(address));
            }
            catch (Exception ex)
            {
                if (// Couldn't download data
                    ex is WebException ||
                    // Data is not an image
                    ex is ArgumentException)
                {
                    return false;
                }
                else
                {
                    throw;
                }
            }
        }

        return true;
    }
}

نصائح أخرى

لا يمكنك القيام بذلك دون تنزيل الملف (على الأقل جزء منه). إستخدم WebClient لجلب عنوان URL وحاول إنشاء جديد Bitmap من عاد byte[]. وبعد إذا كانت ناجحة، فهي حقا صورة. خلاف ذلك، سوف يرمي استثناء في مكان ما في هذه العملية.

بالمناسبة، أنت يمكن القضية HEAD طلب والتحقق من Content-Type رأس في الاستجابة (إذا كان هناك). ومع ذلك، هذه الطريقة ليست مخزنة. الخادم يمكن أن يستجيب مع غير صالح Content-Type رأس.

أود استخدام httpwebrequest للحصول على الرؤوس، ثم تحقق من نوع المحتوى، وأن طول المحتوى غير صفر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top