.net HttpWebRequest में कस्टम "होस्ट" शीर्षलेख कैसे सेट करें?




reflection host (4)

मैं HttpWebRequest में कस्टम होस्ट शीर्ष लेख कैसे सेट करूं? मुझे पता है कि आम तौर पर यह क्लास आपको ऐसा करने की अनुमति नहीं देता है, लेकिन फिर भी प्रतिबिंब या कुछ ऐसा उपयोग करने के लिए वैसे भी है, बिना वास्तव में मुझे पूरी पैकेट TCPClient के साथ भेजने की आवश्यकता है?


ऐसा करने के लिए एक राउंडअबाउट तरीका है, जैसा कि यहां बताया गया है:

http://blogs.msdn.com/feroze_daud/archive/2005/03/31/404328.aspx

हालांकि, ढांचे के अगले संस्करण (.NET Framework 4.0) इसे आसान बना देगा।

http://blogs.msdn.com/ncl/archive/2009/07/20/new-ncl-features-in-net-4-0-beta-2.aspx

उम्मीद है की यह मदद करेगा।



आप इस हैक का उपयोग कर सकते हैं, इस समस्या को हल करने के लिए डिज़ाइन किया गया। 3.5।

using System;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Reflection;


namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://198.252.206.16");

            FieldInfo headersFieldInfo =  request.GetType().GetField("_HttpRequestHeaders", System.Reflection.BindingFlags.NonPublic
                                                    | System.Reflection.BindingFlags.Instance
                                                    | System.Reflection.BindingFlags.GetField);

            CusteredHeaderCollection WssHeaders = new CusteredHeaderCollection(".com");

            headersFieldInfo.SetValue(request, WssHeaders);

            request.Proxy = null;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            StreamReader sr = new StreamReader(response.GetResponseStream());
            string result = sr.ReadToEnd();
            Console.WriteLine(result);
            Console.ReadLine();

        }
        public class CusteredHeaderCollection : WebHeaderCollection
        {
            public bool HostHeaderValueReplaced { get;private  set; }

            public string ClusterUrl { get; private set; }

            public CusteredHeaderCollection(string commonClusterUrl) : base()
            {
                if (string.IsNullOrEmpty("commonClusterUrl"))
                    throw new ArgumentNullException("commonClusterUrl");

                this.ClusterUrl = commonClusterUrl;
            }

            public override string ToString()
            {
                this["Host"] = this.ClusterUrl;
                string tmp =  base.ToString();
                this.HostHeaderValueReplaced = true;

                return tmp;
            }

        }
    }
}

WebClient यह अनुमति देता है

var client = new WebClient();
client.Headers.Add( "Host", WebHeader );

मैं आपको बता नहीं सका क्यों प्रलेखन स्पष्ट रूप से बताता है कि मेजबान सिस्टम शीर्षलेख है।





host