HttpWebRequest এবং HttpWebResponse থেকে এইচটিটিপি স্থিতির কোড নম্বর (200, 301, 404 ইত্যাদি) প্রাপ্ত করা হচ্ছে


289

আমি HttpWebResponseএকটি থেকে ফিরে আসা অবজেক্টটি থেকে HTTP স্থিতি কোড নম্বর পাওয়ার চেষ্টা করছি HttpWebRequest। আমি পাঠ্য বর্ণনার পরিবর্তে প্রকৃত সংখ্যাগুলি (200, 301,302, 404, ইত্যাদি) পাওয়ার আশা করছিলাম। ("ওকে", "মুভিড পারমানেন্টলি", ইত্যাদি) নম্বরটি কোনও প্রতিক্রিয়ার অবজেক্টে কোথাও কোনও সম্পত্তিতে দাফন করা হয়? একটি বড় সুইচ ফাংশন তৈরি ছাড়া অন্য কোনও ধারণা? ধন্যবাদ।

HttpWebRequest webRequest = (HttpWebRequest)WebRequest
                                           .Create("http://www.gooogle.com/");
webRequest.AllowAutoRedirect = false;
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
//Returns "MovedPermanently", not 301 which is what I want.
Console.Write(response.StatusCode.ToString());

বিপরীত কর্ম জন্য: httpResponse.HTTPStatusCode = (HttpStatusCode) Enum.ToObject (typeof (HttpStatusCode), 404))
লিয়ান্দ্রো

উত্তর:


402
Console.Write((int)response.StatusCode);

এইচটিটিপিস্ট্যাটাসকোড (এর ধরণ response.StatusCode) এমন একটি গণনা যেখানে সদস্যদের মানগুলি এইচটিটিপি স্থিতি কোডগুলির সাথে মেলে যেমন,

public enum HttpStatusCode
{
    ...
    Moved = 301,
    OK = 200,
    Redirect = 302,
    ...
}

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

10
@ রিস্টি: যদি সংযোগটি ব্যর্থ হয় এবং সুতরাং অনুরোধটি প্রেরণ করা যায়নি এবং কোনও প্রতিক্রিয়া পাওয়া যায়নি, তবে কোনও HTTP স্থিতি কোড থাকবে না।
অলিভার

3
এইচটিটিপি সাবস্ট্যাটাসের মানটি কীভাবে পাবেন ? উদাহরণস্বরূপ, 404.13 সামগ্রীর দৈর্ঘ্য অনেক বড় রেফারেন্স: iis.net/configreferences/system.webserver/security/…
কুইকিনেট

9
বোনাস:bool success = ((int)response.StatusCode) >= 200 && ((int)response.StatusCode) < 300;
আলাইন

12
@ অ্যালাইন ডাবল বোনাস; বুল সাফল্য = প্রতিক্রিয়া ssSuccessStatusCode;
htxryan

244

আপনাকে সতর্কতা অবলম্বন করতে হবে, 4XX এবং 5XX এর পরিসরে সার্ভারের প্রতিক্রিয়াগুলি একটি ওয়েবএক্সেপশন ফেলে দেয়। আপনাকে এটি ধরতে হবে এবং তারপরে একটি ওয়েবএক্সেপশন অবজেক্ট থেকে স্থিতি কোডটি পাওয়া উচিত:

try
{
    wResp = (HttpWebResponse)wReq.GetResponse();
    wRespStatusCode = wResp.StatusCode;
}
catch (WebException we)
{
    wRespStatusCode = ((HttpWebResponse)we.Response).StatusCode;
}

আমি আনন্দিত যে আপনি 4XX এবং 5xx উল্লেখ করেছেন কারণ আমার কোনও প্রোগ্রামটি সঠিকভাবে অভিনয় না করার বিষয়ে সমস্যা ছিল। যদিও আমার এটি উল্লেখ করা উচিত যে বর্তমান .NET ফ্রেমওয়ার্ক আপনাকে যে কোনও ব্যতীত ব্যতিক্রম সম্পর্কে অবহিত করবে তাই এটিও কোনও বুদ্ধিমান।
জোয়েল ট্রুগার

বোনাস হিসাবে, একজন [ডিবাগারনউজারকোড] দিয়ে কোনও পদ্ধতি সাজাতে সক্ষম হতেন এবং কোনও ব্যতিক্রম ছুঁড়ে ফেলা হলে ডিবাগার সেই পদ্ধতিতে থামত না। এই পদ্ধতিতে খারাপভাবে নকশা করা ব্যতিক্রমগুলি মোড়ানো এবং উপেক্ষা করা যেতে পারে। তবে এখন একটি রেজিস্ট্রি সেটিং প্রয়োজন
ক্রোকুসেক

21

'ডিটিবি' অনুসারে আপনাকে এইচটিপিস্ট্যাটাসকোড ব্যবহার করা দরকার, তবে 'জেলডি' অনুসরণ করে আপনার কোড প্রতিক্রিয়া> = 400 নিয়ে অতিরিক্ত সতর্কতা অবলম্বন করা উচিত।

এটি আমার পক্ষে কাজ করেছে:

HttpWebResponse response = null;
HttpStatusCode statusCode;
try
{
    response = (HttpWebResponse)request.GetResponse();
}
catch (WebException we)
{
    response = (HttpWebResponse)we.Response;
}

statusCode = response.StatusCode;
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
sResponse = reader.ReadToEnd();
Console.WriteLine(sResponse);
Console.WriteLine("Response Code: " + (int)statusCode + " - " + statusCode.ToString());

HTTPWebResponse আইডিজিপোসযোগ্য প্রয়োগ করে যাতে এর সাথে ডিল করা জটিল y আপনি এর পরিবর্তে নিম্নলিখিতটি ব্যবহার করতে পারেন যা আপনাকে ব্যবহারের ব্লকের অভ্যন্তরে "প্রতিক্রিয়া" ঘোষণার অনুমতি দেয়: পাবলিক এইচটিপিওয়েবরেসপোনস গেটসেফেরেস্পোনস (এইচটিটিপিওয়েব্রেকুয়েস্ট অনুরোধ) {চেষ্টা করুন H রিটার্ন করুন (এইচটিটিপিওয়েব্রেস্পোনস) অনুরোধ করুন। গেটরেস্পোনস (); } ধরা (WebException we) {ret (HttpWebResponse) we.Response; }}
DesertFoxAZ

11

শুধু নিগৃহীত StatusCodeকরার int

var statusNumber;
try {
   response = (HttpWebResponse)request.GetResponse();
   // This will have statii from 200 to 30x
   statusNumber = (int)response.StatusCode;
}
catch (WebException we) {
    // Statii 400 to 50x will be here
    statusNumber = (int)we.Response.StatusCode;
}

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