পূর্ববর্তী সমস্ত উত্তর সমাধান সরবরাহ না করেই সমস্যার বর্ণনা দেয়। এখানে একটি এক্সটেনশন পদ্ধতি যা আপনার স্ট্রিং নামের মাধ্যমে কোনও শিরোনাম সেট করার অনুমতি দিয়ে সমস্যার সমাধান করে।
ব্যবহার
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.SetRawHeader("content-type", "application/json");
এক্সটেনশন ক্লাস
public static class HttpWebRequestExtensions
{
static string[] RestrictedHeaders = new string[] {
"Accept",
"Connection",
"Content-Length",
"Content-Type",
"Date",
"Expect",
"Host",
"If-Modified-Since",
"Keep-Alive",
"Proxy-Connection",
"Range",
"Referer",
"Transfer-Encoding",
"User-Agent"
};
static Dictionary<string, PropertyInfo> HeaderProperties = new Dictionary<string, PropertyInfo>(StringComparer.OrdinalIgnoreCase);
static HttpWebRequestExtensions()
{
Type type = typeof(HttpWebRequest);
foreach (string header in RestrictedHeaders)
{
string propertyName = header.Replace("-", "");
PropertyInfo headerProperty = type.GetProperty(propertyName);
HeaderProperties[header] = headerProperty;
}
}
public static void SetRawHeader(this HttpWebRequest request, string name, string value)
{
if (HeaderProperties.ContainsKey(name))
{
PropertyInfo property = HeaderProperties[name];
if (property.PropertyType == typeof(DateTime))
property.SetValue(request, DateTime.Parse(value), null);
else if (property.PropertyType == typeof(bool))
property.SetValue(request, Boolean.Parse(value), null);
else if (property.PropertyType == typeof(long))
property.SetValue(request, Int64.Parse(value), null);
else
property.SetValue(request, value, null);
}
else
{
request.Headers[name] = value;
}
}
}
প্রেক্ষাপটে
আমি এর জন্য একটি মোড়ক লিখেছিলাম HttpWebRequest
এবং 13 টি বিধিনিষেধযুক্ত শিরোনামগুলি আমার মোড়কের সম্পত্তি হিসাবে প্রকাশ করতে চাই নি। পরিবর্তে আমি একটি সাধারণ ব্যবহার করতে চেয়েছিলেন Dictionary<string, string>
।
অন্য উদাহরণ হ'ল এইচটিটিপি প্রক্সি যেখানে আপনাকে একটি অনুরোধে শিরোনাম নিতে হবে এবং সেগুলি প্রাপকের কাছে ফরোয়ার্ড করতে হবে।
এমন অনেকগুলি পরিস্থিতি রয়েছে যেখানে এর ব্যবহারিক ব্যবহার বা সম্পত্তি ব্যবহার সম্ভব নয়। ব্যবহারকারীর দ্বারা কোনও সম্পত্তি দিয়ে শিরোনাম সেট করতে বাধ্য করা একটি অত্যন্ত জটিল design ডিজাইনের কারণেই প্রতিফলন প্রয়োজন। উপরের দিকটি হ'ল প্রতিবিম্বটি বিমূর্তভাবে দূরে সরে গেছে, এটি এখনও দ্রুত (আমার পরীক্ষায় .001 সেকেন্ড), এবং একটি এক্সটেনশন পদ্ধতিটি স্বাভাবিক অনুভব করে।
মন্তব্য
শিরোনামের নামগুলি আরএফসি অনুসারে সংবেদনশীল, http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2