ASP.NET C#中自定义处理程序/控件的代码重用

时间:2013-10-15 09:39:37

标签: c# asp.net custom-controls handler ihttphandler

我最近决定编写一个自定义的ASP.NET Web控件来预览网站并将其显示为图像。我在互联网上找到了各种方法,并从每个方法中获取了我最喜欢的部分。

Web控件的第一个版本运行良好,但预览不是异步生成的,因此控件的使用因加载时间而令人沮丧。我编写了另一个代码修订版,用于在不同的请求中生成预览(使用处理程序),这也很有用。

我的第三个修订是编写一个使用处理程序的自定义控件,这样我就可以获得控件的便利性和处理程序的延迟加载。这在自己的项目中运作良好。当它变得复杂的时候,我试图在不同的网站项目中注册来自控件库项目的处理程序。

首先,我是否正确地走了这条路?在我尝试注册处理程序之前,这似乎是个好主意。使用控件很容易。

其次,如果这是正确的方法,我该如何注册这个处理程序?在web应用程序web.config中我尝试了各种类的名称和命名空间,但是当控件试图从处理程序加载图像时,我总是得到404.

以下是我现在的想法:

<add verb="GET" name="ThumbnailHandler" path="GenerateWebsitePreview.ashx" type="HandlerGenerateWebsitePreview, ThumbnailControl"/>

姓名:据我所知,这无关紧要。在我读过的任何文档中都没有要求它,几乎从未提及过。 路径:这是我想要调用处理程序的路径/ URL。这显然也不存在于Web应用程序项目中。我希望它重用库中的那个。使用处理程序,您可以使用您想要的任何路径。 类型:HandlerGenerateWebsitePreview是实现IHttpHandler的类的名称。 ThumbnailControl是此类所在的命名空间。

Web应用程序已经包含对包含自定义控件和自定义处理程序的库项目的项目引用。已知此引用有效,因为找到并呈现了自定义控件。

如果无法从其他项目注册处理程序,如何重用自定义处理程序? “添加”标记中不允许使用“assembly”属性,就像注册自定义控件时一样。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我应该花几分钟时间尝试程序集名称,命名空间和类名。我今天再次尝试,这种组合在其他地方没有用。

<add verb="GET" name="Name" path="path.path" type="Namespace.ClassName, AssemblyName"/>

我以为我曾尝试过这种组合,但显然我没有。