使用默认命名空间的 HttpHandler

Posted

技术标签:

【中文标题】使用默认命名空间的 HttpHandler【英文标题】:HttpHandler using Default Namespace 【发布时间】:2010-10-14 14:15:36 【问题描述】:

我有一个名为 Handler 的 HttpHandler,我将它编译成一个 DLL 并放入我的 ASP.NET 应用程序的 /bin 文件夹中。然后我有一个 .ashx 文件:

<% @ webhandler language="C#" class="Handler" %> 

但我得到一个无法创建类型'处理程序'错误。

但是,如果我将 Handler 包装在一个免费的命名空间中,比如 foo,然后将 .ashx 更改为

<% @ webhandler language="C#" class="foo.Handler" %> 

它工作正常。为什么我不能不使用命名空间,呃,默认命名空间? Microsoft 在 msdn 网站上的许多 HttpHandler 示例中省略了命名空间。

【问题讨论】:

【参考方案1】:

这是因为 .Net 程序集的性质。任何引用类型或值类型都必须包装在命名空间周围。命名空间用于逻辑分组。在您的情况下,您的类“处理程序”是用户定义的引用类型。任何程序集都可以在根处具有一个或多个根命名空间,但它不能在根处具有引用类型或值类型。事实上,当您在项目属性的应用程序选项卡中创建一个新的类库项目时,它有一个选项可以为您的类库项目指定默认命名空间。因此,每当您在项目中创建一个新类时,它都会将其包装在 ProjectProperties.Application.DefaultNameSpace 中指定的默认名称空间中。

如果您希望看到这一点,请尝试使用 .Net SDK 附带的 IL Disassemblar 打开您的 .Net 程序集。

【讨论】:

以上是关于使用默认命名空间的 HttpHandler的主要内容,如果未能解决你的问题,请参考以下文章

xmlstarlet 默认命名空间

XPATHS 和默认命名空间

如何在具有默认命名空间的 xml 文档上使用 XPath

XSD:命名空间和默认命名空间有啥区别

XPATHS和默认命名空间

XML名命空间