首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Microsoft.Web.Administration添加Handler

用Microsoft.Web.Administration添加Handler
EN

Stack Overflow用户
提问于 2021-04-20 08:04:36
回答 1查看 78关注 0票数 0

在初始应用程序设置期间,我使用下面的代码注册httpHandler。

代码语言:javascript
复制
class SomeHandler: IHttpAsyncHandler {

    public void Register() {
        using (ServerManager serverManager = new ServerManager()) {

            string SITE_NAME = HostingEnvironment.ApplicationHost.GetSiteName();
            string APP_PATH = HostingEnvironment.ApplicationHost.GetVirtualPath();
            string SERVICE_CLASS = GetType().FullName.ToString();
            string HANDLER_NAME = GetType().Name;

            ConfigurationElementCollection CEC = serverManager
                .GetWebConfiguration(SITE_NAME, APP_PATH)
                .GetSection("system.webServer/handlers")
                .GetCollection();

            ConfigurationElement ele = null;
            foreach (ConfigurationElement ele1 in CEC) {
                if (ele1.Attributes["name"].Value.ToString() == HANDLER_NAME) {
                    ele = ele1;
                }
            }
            if (ele == null) {
                ele = CEC.CreateElement("add");
                ele["name"] = HANDLER_NAME;
                ...
                CEC.Add(ele);
                serverManager.CommitChanges();
            }
        }
    }
    
    ...
}

问题

它正确地添加了处理程序,处理程序也运行得很好。然而,也有一个问题。最初,我的web.config是这样的

代码语言:javascript
复制
<configuration>
    <appSettings />
    <system.webServer>
        <handlers>
        </handlers>
        ...
    </system.webServer>
    <system.web>
    ...
    </system.web>
</configuration>

以上代码的预期效果如下所示

代码语言:javascript
复制
<configuration>
    <appSettings />
    <system.webServer>
        <handlers>
            <add name="SomeHandler" path="..." verb="..." type="NameSpace.SomeHandler" />
        </handlers>
        ...
    </system.webServer>
    <system.web>
    ...
    </system.web>
</configuration>

但相反我会跟着

注释,即清除处理程序,并添加来自IIS服务器的所有继承处理程序(其中72),然后添加我的处理程序。

问题

是否可以以某种方式阻止CommitChanges()方法添加clear,然后将所有处理程序添加到本地web.config

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 08:22:42

看来我需要更多的搜索。

CarlosAg in 这句话

由于这个集合是"mergeAppend='false'“集合,它具有在底部添加元素的行为,并且必须将所有父元素都带来以确保语义正确。 要想在顶部添加您的代码的语义(并防止父代码被复制),只需更改行: handlersCollection.Add(addElement); 将是: handlersCollection.AddAt(0,addElement);

因此,将CEC.Add(ele)改为CEC.AddAt(0, ele)解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67174855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档