سؤال

وها رمز:

using (var client = new WebClient())
{
    try
    {
        var bytesReceived = client.UploadData("http://localhost", bytesToPost);
        var response = client.Encoding.GetString(bytesReceived);
    }
    catch (Exception ex)
    {
    }
}

وأنا على الحصول على هذا HTTP 500 خطأ خادم داخلي عندما يتم استدعاء أسلوب UploadData. ولكن لا استطيع ان ارى وصف الخطأ في أي مكان في كائن "السابق" أثناء تصحيح. كيف يمكنني كتابة هذا الرمز حتى أتمكن من قراءة وصف الخطأ؟

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

المحلول

وخوادم الويب غالبا ما يعود صفحة خطأ مع مزيد من التفاصيل (إما HTML أو نص عادي اعتمادا على الخادم). يمكنك انتزاع هذا عن طريق اصطياد WebException وقراءة دفق استجابة من الممتلكات Response لها.

نصائح أخرى

ولقد وجدت معلومات مفيدة من أجل التصحيح بهذه الطريقة:

        catch (WebException ex)
        {
            HttpWebResponse httpWebResponse = (HttpWebResponse)ex.Response;
            String details = "NONE";
            String statusCode = "NONE";
            if (httpWebResponse != null)
            {
                details = httpWebResponse.StatusDescription;
                statusCode = httpWebResponse.StatusCode.ToString();
            }

            Response.Clear();
            Response.Write(ex.Message);
            Response.Write("<BR />");
            Response.Write(ex.Status);
            Response.Write("<BR />");
            Response.Write(statusCode);
            Response.Write("<BR />");
            Response.Write(details);
            Response.Write("<BR />");
            Response.Write(ex);
            Response.Write("<BR />");
        }

وحاول اصطياد HttpException وندعو GetHtmlErrorMessage () على أنه

ولقد أحببت دائما

Debug.WriteLine( ex.ToString() );

ويجب عليك استخدام HttpWebRequest وHttpWebResponse. WebClient هو أبسط شيء لاستخدامها للقيام التواصل على شبكة الإنترنت الأساسية، ولكنها لا توفر الوظائف التي تحتاج إليها. أعتقد أنه من الأفضل أن تفعل هذا لأنها لن رمي استثناء.

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