سؤال

أحاول التعامل مع اثنين مختلفين WebExceptionبشكل صحيح.

يتم التعامل معهم بعد الاتصال WebClient.DownloadFile(string address, string fileName)

Afaik ، حتى الآن هناك اثنان يجب أن أتعامل معه ، كلاهما WebException'س:

  • لا يمكن حل الاسم البعيد (أي عدم اتصال الشبكة للوصول إلى الخادم لتنزيل الملف)
  • (404) ملف NOT NOUND (أي الملف غير موجود على الخادم)

قد يكون هناك المزيد ولكن هذا هو ما وجدته أكثر أهمية حتى الآن.

فكيف يجب أن أتعامل مع هذا بشكل صحيح ، كما هو الحال مع كلاهما WebExceptionلكنني أريد التعامل مع كل حالة أعلاه بشكل مختلف.

هذا ما لدي حتى الآن:

try
{
    using (var client = new WebClient())
    {
        client.DownloadFile("...");
    }
}
catch(InvalidOperationException ioEx)
{
    if (ioEx is WebException)
    {
        if (ioEx.Message.Contains("404")
        {
            //handle 404
        }
        if (ioEx.Message.Contains("remote name could not")
        {
            //handle file doesn't exist
        }
    }
}

كما ترون ، أنا أتحقق من الرسالة لمعرفة نوع WebException. أفترض أن هناك طريقة أفضل أو أكثر دقة للقيام بذلك؟

شكرًا

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

المحلول

مرتكز على هذه المقالة MSDN, ، يمكنك أن تفعل شيئًا على الأسطر التالية:

try
{
    // try to download file here
}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
        if (((HttpWebResponse)ex.Response).StatusCode == HttpStatusCode.NotFound)
        {
            // handle the 404 here
        }
    }
    else if (ex.Status == WebExceptionStatus.NameResolutionFailure)
    {
        // handle name resolution failure
    }
}

لست متأكدا من ذلك WebExceptionStatus.NameResolutionFailure هل الخطأ الذي تراه ، ولكن يمكنك فحص الاستثناء الذي يتم إلقاؤه وتحديد ما WebExceptionStatus لهذا الخطأ.

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