Exemple #1
0
        private void SetResponseHeader(string key, NameValueCollection headers, HttpListenerResponse response)
        {
            bool setValue = true;

            if (WebHeaderCollection.IsRestricted(key))
            {
                var currentKey = key.ToLower().Trim();
                var lookup     = GetRestrictedHeaderLookup();

                var match = lookup.FirstOrDefault(x => x.Item1 == currentKey);

                if (match != null)
                {
                    setValue = false;

                    try
                    {
                        if (headers[key].ToLower() == "keep-alive")
                        {
                            response.GetType().InvokeMember("KeepAlive", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, response, new object[] { true });
                        }
                        else
                        {
                            response.GetType().InvokeMember(match.Item2, BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, response, new object[] { headers[key] });
                        }
                    }
                    catch (Exception) { }
                }
            }

            if (setValue)
            {
                try
                {
                    if (Array.IndexOf(response.Headers.AllKeys, key) != -1)
                    {
                        response.Headers[key] = headers[key];
                    }
                    else
                    {
                        response.Headers.Add(key, headers[key]);
                    }
                }
                catch (Exception) { }
            }
        }