1

是否可以在代码中定义 ASP.NET 应用程序的大部分(如果不是全部)web.config?如果是这样,怎么做?你会使用 IHttpModule 吗?同样,您能否在所述模块中解析 IHttpHandler 来处理所有传入请求?

编辑1:最后一点是由this answer to another question引发的。

编辑 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 在代码中注册 HttpHandler,而不是修改配置。示例代码(来自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 中的三个隐藏的可扩展性宝石

于 2010-08-10T19:14:59.143 回答