সি # HTTPWebRequest বনাম WebRequest


112

আমি কোডটির এই অংশটি দেখেছি:

var request = (HttpWebRequest) WebRequest.Create("http://www.google.com");

কেন আপনি castালাই প্রয়োজন (HttpWebRequest)? শুধু ব্যবহার HttpWebRequest.Createকরবেন না কেন ? কি কারনে চাইছি HttpWebRequest.Createএমন একটি WebRequest, একটি না HttpWebRequest?


পোস্ট সম্পর্কিত: stackoverflow.com/q/8209781/274502
cregox

উত্তর:


134

Createপদ্ধতি স্ট্যাটিক, এবং শুধুমাত্র বিদ্যমান WebRequest। এটিকে কল করা HttpWebRequest.Createঅন্যরকম মনে হলেও এটি আসলে কল করার জন্য সংকলিত WebRequest.Create। এটি কেবল HttpWebRequestউত্তরাধিকারের কারণে চালু রয়েছে বলে মনে হয় ।

Createপদ্ধতি অভ্যন্তরীণভাবে, বস্তু প্রকৃত সৃষ্টি, উপর ভিত্তি করে যা করতে কারখানা প্যাটার্ন ব্যবহার Uriআপনি এটি পাস। আপনি আসলে অন্যান্য বস্তু ফিরে পেতে পারিনি, মত FtpWebRequestবা FileWebRequest, তার উপর নির্ভর করে Uri


3
এটা ঠিক। HttpWebRequest.Create বা কাস্টিং ছাড়াই HTTPWebRequest.CreateHttp এর মতো কোনও কিছু থেকে HTTPWebRequest পাওয়ার কোনও উপায় থাকলে খুব ভাল হত। প্রথমটি হ'ল সর্বজনীন নতুন স্ট্যাটিক এইচটিটিপিওয়েব্রেকয়েস্ট ক্রিয়েট (স্ট্রিং url) এর মতো। যে কোনও উপায়ে, url টি HTTP (গুলি) না থাকলে এটি কেবল কিছু অকার্যকর-অনুগ্রহটি ছুঁড়ে ফেলা উচিত।
ম্যাথু ফ্ল্যাশেন

4
নেট নেট নির্মাতারা একটি খুব অদ্ভুত নকশা সিদ্ধান্তের (আমি ভুল বলতে সাহস করব?) খুব সুন্দর ব্যাখ্যা।
আইজে কেনেডি

2
@ আইজে কেনেডি আমি পুরোপুরি একমত, খুব অদ্ভুত, অযৌক্তিক এবং অবাস্তব নকশার সিদ্ধান্ত।
এইডিয়াখপি

8
HttpWebRequest.CreateHttp বিদ্যমান এবং এটি একটি HTTPWebRequest উদাহরণ তৈরি করে।
পিটার মেইন

4
@Bobson WebRequest.CreateHttpহয় 4.5 মধ্যে
মার্ক

31

WebRequestএকটি বিমূর্ত শ্রেণি, যার একটি কারখানা পদ্ধতি রয়েছে Createযা ইউআরএল পাসের উপর নির্ভর করে একটি কংক্রিট সাবক্লাসের উদাহরণ তৈরি করে। HttpWebRequest httpreq = (HttpWebRequest)WebRequest.Create(strUrl);পরিবর্তে আপনার প্রয়োজন বা চান তা আপনার প্রয়োজনের WebRequest req = WebRequest.Create(strUrl);উপর নির্ভর করে এবং আপনি কোন ধরণের ইউআরএল পাস করেন তার উপর নির্ভর করে।

যদি আপনি কেবল এইচটিটিপি: ইউআরএল-এ পাস করেন তবে পূর্বের কোডটি HttpWebRequestবেস ক্লাসে সংজ্ঞায়িত করা ছাড়াও সাবক্লাস প্রয়োগকারী বৈশিষ্ট্য এবং পদ্ধতিগুলি অ্যাক্সেস করার অনুমতি দেয় WebRequest। তবে আপনি যদি কোনও এফটিপি: ইউআরএল পাস করেছেন তবে কাস্ট করার চেষ্টা HttpWebRequestব্যর্থ হবে।

পরবর্তীটি জেনেরিক এবং সমর্থিত ইউআরএল এর কোনও ধরণের ক্ষেত্রে ব্যর্থ হবে না তবে অবশ্যই কোনও সাবক্লাসে কাস্টিং ব্যতীত আপনি কেবল বেস শ্রেণীর সংজ্ঞাযুক্ত বৈশিষ্ট্য এবং পদ্ধতিগুলি অ্যাক্সেস করতে পারবেন।

- মার্টিন হোনেনের মাধ্যমে


12

কাস্ট কেবল তখনই প্রয়োজনীয় যখন আপনার HTTPWebRequest এর অনন্য সদস্যদের অ্যাক্সেস দরকার। ধারণাটিটি হ'ল যদি ওয়েবআরকোয়েস্টে সমর্থিত বৈশিষ্ট্য / পদ্ধতিগুলি পর্যাপ্ত হয় তবে আপনি একটি অ্যাপ্লিকেশন লিখতে পারেন যা বহু ধরণের অনুরোধ / প্রতিক্রিয়া প্রোটোকলের বিরুদ্ধে কাজ করবে। এই ক্ষেত্রে ইউআরআই প্লাগেবল প্রোটোকল দ্বারা সমর্থিত কোনও প্রোটোকল ব্যবহার করে ব্যবহারকারী দ্বারা প্রদত্ত কিছু হতে পারে। মূল সফ্টওয়্যার পরিবর্তন না করে এমনকি নতুন প্রোটোকলগুলি সমর্থন করা যেতে পারে।

যদি আপনার অ্যাপ্লিকেশনটির কোনও নির্দিষ্ট প্রোটোকলের জন্য নির্দিষ্ট বৈশিষ্ট্যগুলির উপরে আরও নিয়ন্ত্রণের প্রয়োজন হয় তবে আপনি অনুরোধআউরিটিকে আপনার সমর্থিত স্কিম (গুলি) এর মধ্যে সীমাবদ্ধ করতে পারেন এবং ওয়েব্রোয়েস্টকে উপযুক্ত প্রোটোকল-নির্দিষ্ট সাবক্লাসে কাস্ট করতে পারেন। এটি আপনার অ্যাপ্লিকেশন দ্বারা সমর্থিত প্রোটোকলগুলিকে সীমাবদ্ধ করে, তবে আপনাকে প্রোটোকল-নির্দিষ্ট বৈশিষ্ট্যগুলি টুইচ করতে সক্ষম করে।

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