Можете ли вы программно определить конфигурацию ASP.NET? - PullRequest
1 голос
/ 10 августа 2010

Можно ли определить большую часть, если не весь, web.config приложения ASP.NET в коде? Если так, то как? Будете ли вы использовать IHttpModule? В том же духе, можете ли вы разрешить IHttpHandler в указанном модуле для обработки всех входящих запросов?

Редактировать 1: Последний бит был вызван этим ответом на другой вопрос .

Редактировать 2: Что я действительно хочу сделать, так это добавить / удалить модули и обработчики в коде, а не web.config. Мне, вероятно, нужно по крайней мере установить модуль в web.config, который позволил бы это. Могу ли я зарегистрировать дополнительные модули и обработчики? Я просто изучаю возможности.

Ответы [ 2 ]

2 голосов
/ 10 августа 2010

Вы можете изменить его во время выполнения. Инструкции и возможные подводные камни изложены здесь: http://www.beansoftware.com/ASP.NET-Tutorials/Modify-Web.Config-Run-Time.aspx

Я видел несколько веб-приложений, которые изменяют конфигурацию в процессе установки или обслуживания. (DotNetNuke делает это во время установки, и AspDotNetStorefront изменяет несколько параметров в рамках мастера настройки.)

Но помните, что каждый раз, когда вы меняете web.config, приложение должно перекомпилироваться, поэтому это может раздражать. Вам лучше сохранить настройки в базе данных и использовать те, где вы можете. Легче изменить и менее разрушительно.

1 голос
/ 10 августа 2010

Вместо того, чтобы изменять конфигурацию, вы можете зарегистрировать HttpHandlers при запуске приложения в коде, используя PreApplicationStartupMethod. Пример кода (из сообщения в блоге Нихила Котари ):

[assembly: PreApplicationStartMethod(typeof(UserTrackerModule), "Register")]

namespace DynamicWebApp.Sample {

    public sealed class UserTrackerModule : IHttpModule {

        #region Implementation of IHttpModule
        void IHttpModule.Dispose() {
        }

        void IHttpModule.Init(HttpApplication application) {
            application.PostAuthenticateRequest += delegate(object sender, EventArgs e) {
                IPrincipal user = application.Context.User;

                if (user.Identity.IsAuthenticated) {
                    DateTime activityDate = DateTime.UtcNow;

                    // TODO: Use user.Identity and activityDate to do
                    //       some interesting tracking
                }
            };
        }
        #endregion

        public static void Register() {
            DynamicHttpApplication.RegisterModule(delegate(HttpApplication app) {
                return new UserTrackerModule();
            });
        }
    }
}

Также см. Пост Фила Хаака, Три скрытых самоцвета в ASP.NET 4 .

...