IIS让我们能够配置Asp.Net文件映射。因此,除了aspx之外,当请求具有以下文件扩展名时,IIS还会调用Asp.Net运行时:
a) .ascx --> .asmx扩展名用于请求用户控件。
- 由于无法直接访问用户控件,那么为什么和如何会有人发送请求到用户控件呢?
b) .ashx --> 此扩展名用于HTTP处理程序。
• 但是,为什么要直接请求.ashx页面,而不是在配置文件中注册此处理程序,并使其在请求具有某些(非ashx)扩展名的文件时被调用?
• 此外,由于可能已注册多个Http处理程序,如果它们都使用ashx扩展名,Asp.Net将如何知道要调用哪个处理程序?
• 请求的ashx文件包含什么?也许是一个Http处理程序类的定义?
• 我知道如何注册Http处理程序以在请求非ashx页面时调用它们,但是如何为ashx页面注册Http处理程序呢?
c) .asax --> 这个扩展名用于请求全局应用程序文件
• 为什么我们要直接调用Global.asax?
• 我认为当请求Global.asax时,会创建一个派生自HTtpApplication类的对象,但这次没有进行网页处理?
谢谢
因此,如果我编写Http处理程序,则应将其放在具有.ashx扩展名的文件中,并且Asp.Net将构建一个HttpHandler对象,类似于它如何从.aspx文件构建页面实例?
但是为什么Asp.Net不允许直接请求.cs、.csproj、.config、.resx、.licx和.webinfo文件呢?
a) 和 c) - 据我所知,它们没有暴露给任何外部请求进行处理
我的书声称这两个被映射在IIS中
我感激你的帮助
编辑:
b) .ashx扩展名在配置文件中定义,但不是web.config文件,而是machine.config文件
<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
http://msdn.microsoft.com/en-us/library/bya7fh0a.aspx为什么使用.ashx: 不同之处在于处理.ashx的.NET类读取.ashx文件中的Page指令,以将请求映射到指定在该指令中的类。这样可以避免为每个处理程序都在web.config中放置显式路径,从而导致非常长的web.config。
我认为Http处理程序类是在.ashx文件内定义的,但实际上扩展名为.ashx的文件只包含Page指令?
我并不完全确定是否理解正确:假设我们有十个Http处理程序,我们想通过向IIS7发出请求来调用它们。我认为每个Http处理程序都将有特定的.ashx文件-->因此,如果对FirstHandler.asxh进行请求,则将调用该文件内指定的处理程序?
另一个编辑:
我必须承认,我仍然有点不确定ashx扩展名。
我意识到通过使用它,例如可以创建'hey.ashx'页面,其中Page指令将告诉哪个类(Http处理程序)在请求'hey.ashx'时调用--因此无需在web.config中注册Http处理程序。
但是,如果您以这种方式使用Http处理程序,则只有在请求具有.ashx扩展名的文件时才会调用它们。因此,如果我希望为具有其他扩展名(例如.sourceC)的文件调用Http处理程序,则仍需要在web.config中注册Http处理程序?!
.aspx
比.ashx
更复杂” ;) - Mehrdad Afshari