التعامل مع اثنين من WebException بشكل صحيح
-
27-09-2019 - |
سؤال
أحاول التعامل مع اثنين مختلفين 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
لهذا الخطأ.