asp.net - 使用默认命名空间的 HttpHandler

标签 asp.net namespaces httphandler

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

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

但我收到了无法创建类型“处理程序”的错误。

但是,如果我将 Handler 包装在一个免费的命名空间中,比如 foo ,并将 .ashx 更改为
<% @ webhandler language="C#" class="foo.Handler" %> 

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

最佳答案

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

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

关于asp.net - 使用默认命名空间的 HttpHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/666927/

相关文章:

c# - 使用 BuildManager.CreateInstanceFromVirtualPath 创建页面时,PageAsyncTasks 不会等待完成

c# - 找不到正确的命名空间?

c++ - 用最近定义的结构替换前向声明的结构

asp.net - 用于检索大量二进制图像的 .ashx 处理程序的性能

c# - 当多个用户在 Gridview 中选择同一行时,Java 脚本弹出框

c# - 传入字典的模型项在 ASP.net MVC 中属于“System.Collections.Generic.List...”类型

c# - 找不到以编程方式添加的复选框

asp.net - 页面不会填满浏览器的高度

c++ - 为什么在类/结构级别不允许 "using namespace X;"?

asp.net - 在 ASP.NET 中通过 HttpModule 处理静态文件