System.Net.WebException HTTP স্থিতি কোড


153

এটি থেকে এইচটিটিপি স্থিতি কোড পাওয়ার সহজ উপায় কি আছে System.Net.WebException?

উত্তর:


248

এরকম কিছু হতে পারে ...

try
{
    // ...
}
catch (WebException ex)
{
    if (ex.Status == WebExceptionStatus.ProtocolError)
    {
        var response = ex.Response as HttpWebResponse;
        if (response != null)
        {
            Console.WriteLine("HTTP Status Code: " + (int)response.StatusCode);
        }
        else
        {
            // no http status code available
        }
    }
    else
    {
        // no http status code available
    }
}

তবে ওয়েবেক্সেপশন বাদে "কানেক্টফেইলওর" ব্যতীত আমি নাল হিসাবে প্রতিক্রিয়া পাই, সে ক্ষেত্রে আমি কীভাবে httpstatus কোড পেতে পারি
রাস্টি

8
@ রিস্টি: আপনি পারবেন না। যদি কোনও সংযোগ ব্যর্থ হয় তবে কোনও HTTP স্থিতি কোড পাওয়ার দরকার নেই।
লুক এইচ

4
ত্রুটিটি যদি কোনও প্রোটোকলরর হয় তবে আপনাকে শূন্যের জন্য প্রতিক্রিয়াটি পরীক্ষা করতে হবে না। এই এমএসডিএন পৃষ্ঠায়
আন্দ্রেস টথ

5
@ অ্যান্ড্রাসটোথ কিন্তু রিশার্পারের মতো সরঞ্জামগুলি যদি আপনি নাল চেক বাদ দেন তবে আপনাকে একটি সতর্কতা দেবে। এবং যে কোনও ক্ষেত্রে, এটি রক্ষণাত্মকভাবে কোড করা ভাল অনুশীলন।
টম লিন্ট

1
এইচটিটিপি সাবস্ট্যাটাসের মানটি কীভাবে পাবেন ? উদাহরণস্বরূপ, 404.13 সামগ্রীর দৈর্ঘ্য অত্যধিক বড় রেফারেন্স : ডকস.মাইক্রোসফটকম /en-us/iis/configration/system.webServer/…
কিকিউনেট

27

নাল-কন্ডিশনাল অপারেটর ( ?.) ব্যবহার করে আপনি একক লাইন কোডের সাথে এইচটিটিপি স্থিতি কোডটি পেতে পারেন:

 HttpStatusCode? status = (ex.Response as HttpWebResponse)?.StatusCode;

ভেরিয়েবলটি statusথাকবে HttpStatusCode। যখন নেটওয়ার্ক ত্রুটির মতো আরও সাধারণ ব্যর্থতা দেখা দেয় যেখানে কোনও HTTP স্থিতি কোড প্রেরণ করা হয় না তখন statusতা বাতিল হয়ে যাবে। ex.Statusসেক্ষেত্রে আপনি এটি পেতে পরিদর্শন করতে পারেন WebExceptionStatus

আপনি যদি ব্যর্থতার ক্ষেত্রে কেবল বর্ণনামূলক স্ট্রিং চান তবে প্রাসঙ্গিক ত্রুটি পেতে আপনি নাল-কোয়েলসিং অপারেটর ( ??) ব্যবহার করতে পারেন :

string status = (ex.Response as HttpWebResponse)?.StatusCode.ToString()
    ?? ex.Status.ToString();

404 HTTP স্থিতি কোডের ফলাফল হিসাবে যদি ব্যতিক্রম ছুঁড়ে ফেলা হয় তবে স্ট্রিংটিতে "নটফাউন্ড" থাকবে। অন্যদিকে, সার্ভারটি অফলাইনে থাকলে স্ট্রিংটিতে "কানেক্টফেইলচার" থাকবে so

(এবং যে কেউ এইচটিটিপি সাবটাস কোডটি কীভাবে পাবেন তা জানতে চান That এটি সম্ভব নয় It এটি একটি মাইক্রোসফ্ট আইআইএস ধারণা যা কেবলমাত্র সার্ভারে লগইন থাকে এবং কখনই ক্লায়েন্টকে প্রেরণ হয় না))


?.পূর্বরূপ প্রকাশের সময় অপারেটরটির নাম মূলত নাল প্রোপাগেশন অপারেটর বা নাল-কন্ডিশনাল অপারেটরের নাম ছিল কিনা তা নিশ্চিত নয় । তবে অ্যাটলাসিয়ান পুনরায় ভাগ করা এই জাতীয় পরিস্থিতিতে নাল প্রচারের অপারেটরটি ব্যবহার করার জন্য একটি সতর্কতা দেয়। এটিকে নাল-কন্ডিশনাল অপারেটরও বলা হয়।
আরবিটি

1
এই পার্টিতে কিছুটা দেরি হলেও নাল-শর্তসাপেক্ষ অপারেটরটি একটি সি # 6.0 বৈশিষ্ট্য হিসাবে ন্যায্য সতর্কতা, সুতরাং এটির সমর্থনকারী একটি সংকলক ব্যবহার করা দরকার। আরও বিশদ সহ ওভারফ্লো উত্তর স্ট্যাক করুন । ভিএস 2015+ এর এটি ডিফল্টরূপে রয়েছে তবে যদি কেউ কেবল "তাদের মেশিন" ব্যতীত অন্য যে কোনও ধরনের বিল্ড / মোতায়েনের পরিবেশ ব্যবহার করে থাকে তবে অন্যান্য বিষয়গুলি বিবেচনায় নেওয়া দরকার।
কোডএইচএসআর

9

এটি কেবল তখনই কাজ করে যদি ওয়েবরেসপনস এইচটিটিপিওয়েব্রেস্পোনস হয়।

try
{
    ...
}
catch (System.Net.WebException exc)
{
    var webResponse = exc.Response as System.Net.HttpWebResponse;
    if (webResponse != null && 
        webResponse.StatusCode == System.Net.HttpStatusCode.Unauthorized)
    {
        MessageBox.Show("401");
    }
    else
        throw;
}

সমস্ত সম্ভাব্য এইচটিটিপি ত্রুটি স্থিতির কোডগুলির পরিবর্তে কেবল 401-অননুমোদিত সাথে কেন व्यवहार করবেন? এটি সবচেয়ে খারাপ উত্তর
ympostor

4
@ এম্পোস্টর এটি কেবল একটি উদাহরণ। যে কোনও যুক্তিসঙ্গত বিকাশকারী এটি বুঝতে পারে। আপনার মন্তব্য আমি এখানে পড়েছি সবচেয়ে উদাসীন।
pr0gg3r

9

(আমি বুঝতে পারি যে প্রশ্নটি পুরানো, তবে এটি গুগলে শীর্ষ হিটগুলির মধ্যে রয়েছে))

একটি সাধারণ পরিস্থিতি যেখানে আপনি প্রতিক্রিয়া কোডটি জানতে চান ব্যতিক্রম হ্যান্ডলিং। সি # 7 হিসাবে, আপনি কেবলমাত্র ক্যাচ ক্লজটি প্রবেশ করতে প্যাটার্ন ম্যাচিং ব্যবহার করতে পারেন যদি ব্যতিক্রমগুলি আপনার প্রস্তাবের সাথে মেলে:

catch (WebException ex) when (ex.Response is HttpWebResponse response)
{
     doSomething(response.StatusCode)
}

এটি সহজেই আরও স্তরে প্রসারিত হতে পারে যেমন এই ক্ষেত্রে যেখানে WebExceptionপ্রকৃতপক্ষে অন্যটির অভ্যন্তরীণ ব্যতিক্রম ছিল (এবং আমরা কেবল এতে আগ্রহী 404):

catch (StorageException ex) when (ex.InnerException is WebException wex && wex.Response is HttpWebResponse r && r.StatusCode == HttpStatusCode.NotFound)

সবশেষে: নোট করুন কীভাবে যখন আপনার মানদণ্ডের সাথে মেলে না, তখন ক্যাচ ক্লজে ব্যতিক্রমটি কীভাবে পুনরায় ছুঁড়ে ফেলার দরকার নেই, যেহেতু আমরা উপরের সমাধানটি দিয়ে প্রথম স্থানে ধারাটি প্রবেশ করি না।


4

আপনি ওয়েবএক্সসেপশন থেকে এইচটিটিপি স্থিতি কোড পেতে এই কোডটি চেষ্টা করতে পারেন। এটি সিলভারলাইটেও কাজ করে কারণ এসএলে ওয়েবএক্সেপশনস্ট্যাটাস নেই rot প্রোটোকল ইরার সংজ্ঞায়িত।

HttpStatusCode GetHttpStatusCode(WebException we)
{
    if (we.Response is HttpWebResponse)
    {
        HttpWebResponse response = (HttpWebResponse)we.Response;
        return response.StatusCode;
    }
    return null;
}

1
return 0? বা আরও ভাল HttpStatusCode?( শোধনযোগ্য )?
কিকিনেট

এই কাজ করবে? var code = GetHttpStatusCode(ex); if (code != HttpStatusCode.InternalServerError) {EventLog.WriteEntry( EventLog.WriteEntry("MyApp", code, System.Diagnostics.EventLogEntryType.Information, 1);}
এফএমএফএফ

আপনি এই নমুনায় কী করতে চেয়েছিলেন তা বুঝতে পারি না। কোন পরিস্থিতিতে আপনি ইভেন্টটি লগ হতে চেয়েছিলেন?
সের্গেই

1

আমি নিশ্চিত কিনা তবে সেখানে যদি এমন সম্পত্তি থাকে তবে এটি নির্ভরযোগ্য হিসাবে বিবেচিত হবে না। একটি WebExceptionHTTP- র চেয়ে অন্য কারণে সহজ নেটওয়ার্কিং ত্রুটি সহ ত্রুটি কোডগুলি বহিস্কার করা যেতে পারে। যাদের এই জাতীয় কোনও ত্রুটি কোড নেই।

আপনি এই কোডটি দিয়ে কী সম্পাদন করতে চাইছেন সে বিষয়ে আমাদের কিছুটা আরও তথ্য দিতে পারেন? আপনার প্রয়োজনীয় তথ্য পাওয়ার আরও ভাল উপায় হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.