1

コードで ASP.NET アプリケーションの web.config 全体ではないにしても、大部分を定義することは可能ですか? もしそうなら、どのように?IHttpModule を使用しますか? 同じように、上記のモジュール内で IHttpHandler を解決して、すべての着信要求を処理できますか?

編集 1:最後のビットは、別の質問に対するこの回答によって引き起こされました。

編集 2:私が本当にやりたいことは、web.config とは対照的に、コードでモジュールとハンドラーを追加/削除することです。おそらく、これを可能にするモジュールを web.config に設定する必要があります。その後、追加のモジュールとハンドラーを登録できますか? 可能性を模索しているだけです。

4

2 に答える 2

2

実行時に変更できます。手順と考えられる落とし穴の概要は次のとおりです: http: //www.beansoftware.com/ASP.NET-Tutorials/Modify-Web.Config-Run-Time.aspx

インストールまたはメンテナンスプロセス中に構成を変更するいくつかのWebアプリを見てきました。(DotNetNukeはインストール中にそれを行い、AspDotNetStorefrontは構成ウィザードの一部としていくつかの設定を変更します。)

ただし、web.configを変更するたびに、アプリを再コンパイルする必要があるため、煩わしい場合があることに注意してください。設定をデータベースに保存し、可能な場合はそれらを使用する方がよいでしょう。変更が簡単で、混乱が少ない。

于 2010-08-10T05:47:43.473 に答える
1

構成を変更するのではなく、PreApplicationStartupMethod を使用してコードでアプリケーションの起動時に HttpHandlers を登録できます。コード例 ( Nikhil Kothari のブログ投稿から):

[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();
            });
        }
    }
}

Phil Haack の投稿、ASP.NET 4 の 3 つの隠された拡張性の宝石も参照してください。

于 2010-08-10T19:14:59.143 に答える