ASP.NET 3.5 Custom Configuration, раздел не работает - PullRequest
0 голосов
/ 02 февраля 2009

Я пытаюсь использовать пользовательский раздел конфигурации, что я делал много раз раньше с успехом, но по какой-то причине сегодня он не работает. Код для раздела конфигурации:

public class RedirectorConfiguration : ConfigurationSection
{
    [ConfigurationProperty("requestRegex", DefaultValue = ".*")]
    public string RequestRegex { get; set; }

    [ConfigurationProperty("redirectToUrl", IsRequired = true)]
    public string RedirectToUrl { get; set; }

    [ConfigurationProperty("enabled", DefaultValue = true)]
    public bool Enabled { get; set; }
}

Соответствующие разделы из web.config:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="httpRedirector" type="Company.HttpRedirector.RedirectorConfiguration, Company.HttpRedirector"/>
    </configSections>
    <httpRedirector redirectToUrl="http://www.google.com" />
</configuration>

И я пытаюсь использовать код в следующем HttpModule:

using System;
using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web;

namespace Company.HttpRedirector
{
    public class HttpRedirectorModule : IHttpModule
    {
        static RegexOptions regexOptions = RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace;
        static Regex requestRegex = null;

        public void Dispose() { }

        public void Init(HttpApplication context)
        {
            context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
        }

        void context_PreRequestHandlerExecute(object sender, EventArgs e)
        {
            var app = sender as HttpApplication;
            var config = ConfigurationManager.GetSection("httpRedirector") as RedirectorConfiguration;

            if (app == null || app.Context == null || config == null)
                return; // nothing to do

            if (requestRegex == null)
            {
                requestRegex = new Regex(config.RequestRegex,
                    regexOptions | RegexOptions.Compiled);
            }

            var url = app.Request.Url.AbsoluteUri;
            if (requestRegex != null || requestRegex.IsMatch(url))
            {
                if (!string.IsNullOrEmpty(config.RedirectToUrl))
                    app.Response.Redirect(config.RedirectToUrl);
            }
        }
    }
}

То, что происходит, - то, что объект конфигурации возвращается успешно, но все свойства, отмеченные как "ConfigurationProperty", установлены в значения по умолчанию null / type, как будто он никогда не пытался отобразить значения из файла конфигурации. В процессе запуска исключений нет.

Есть идеи, что здесь происходит?

1 Ответ

3 голосов
/ 03 февраля 2009

Ваш класс конфигурации не имеет правильных свойств. Следует читать:

    [ConfigurationProperty("requestRegex", DefaultValue = ".*")]
    public string RequestRegex
    {
        get
        {
            return (string)this["requestRegex"];
        }
        set
        {
            this["requestRegex"] = value;
        } 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...