繁体   English   中英

如何自动注册Web服务器控件所需的HttpHandler?

[英]How to automatically register an HttpHandler required by a web server control?

在ASP.NET中,当在包含HttpHandler的类库中构建Web服务器控件时,是否有一种方法可以自动注册处理程序,而无需手动编辑Web应用程序的web.config文件?

我有一个包含CompositeControl的类库。 在复合控件中,我有一个Image控件,其ImageUrl属性设置为HttpHandler。 为了使HttpHandler在使用类库的应用程序中工作,我必须在web.config文件中输入以下内容:

<add verb="*" path="Icon.ashx" type="ClassLibrary.MyHandler" />

我已经阅读了这篇博客文章 ,其中概述了如何欺骗设计人员为您执行此操作,但是我希望某些不需要我的类库用户在Visual Studio中输入设计人员即可起作用的方法。

我认为没有任何方法可以在运行时注册处理程序。 您已经拥有的代码变体将在运行时修改web.config的其他部分,但是如果您尝试修改<httpHandlers>,则会悄然失败。 您可以像解析任何其他XML文件一样解析和编辑web.config,但是不一定要假设应用程序在运行时具有对web.config的写权限。

但是,通过处理应用程序的BeginRequest事件,可以达到与HttpHandler相同的效果。 在控件第一次加载时添加一个事件处理程序,在该处理程序中,您可以检查Request.Url是否是您应该处理的事件,如果是,请调用ProcessRequest代码。 最后,调用HttpApplication.CompleteRequest()跳过常规请求处理。 您将为每个请求增加一点开销,因此由您自己决定是否值得避免手动进行web.config编辑。

一种解决方案是在运行时使用IsHttpHandlerRegistered()方法,以便在未注册处理程序的情况下提供有用的异常。 这似乎是ASP.NET本身如何处理需要HttpHandler的功能的方式。 在运行时读取配置应该没问题,尽管获取Configuration对象会稍有不同:

Configuration configuration = WebConfigurationManager.OpenWebConfiguration("~");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM