HttpHandlerFiresOnlyIfFileDoesNotExist当请求的文件不存在时触发(EG:请求来自文件X,如果X存在我要服务那个文件,否则处理程序应该处理它)。这些文件只是静态内容,而不是脚本本身,我认为这样做会更容易,但我似乎找不到任何可以做到这一点的东西……有人有什么想法吗?我认为它可以完成,因为IIS7重写模块可以管理它,但我看不到如何...编辑只是为了澄清...处理程序是典型情况,它不是错误处理例程,但实际上服务于合适的内容。我只是希望能够将新文件作为单独的东西添加到文件夹中,或者作为处理程序将提供的内容的重载。我最终坚持使用处理程序,而是使用以下方法来解决问题:if(File.Exists(context.Request.PhysicalPath))context.Response.TransmitFile(context.Request.PhysicalPath);else{/*标准处理*/}鉴于这么多人争论模块和捕获异常,我觉得我应该澄清为什么我不听:这是标准的程序流程,所以我不喜欢这种想法除非绝对必要,否则使用异常来触发它。这实际上是在正常情况下返回内容。HttpModule实际上处理典型请求而不是仅仅做一些基本的共享处理和处理边缘情况的想法似乎有点过时了。因此,我更喜欢使用HttpHandler,因为它可以处理典型的请求。可能您想实现一个HttpModule。否则,您将与所有其他HttpHandler争夺请求。那应该让你开始......你可以决定你想要在请求生命周期中的哪个地方执行检查和响应。有相关背景,请参考阅读此文章usingSystem;使用System.IO;使用System.Web;namespaceRequestFilterModuleTest{publicclassRequestFilterModule:IHttpModule{#regionIHttpModule的实现//////初始化一个模块并准备它来处理请求。/////////提供对ASP.NET应用程序中所有应用程序对象共有的方法、///属性和事件的访问///publicvoidInit(HttpApplicationcontext){context.BeginRequest+=上下文开始请求;}//////处理实现模块使用的资源(内存除外)。///publicvoidDispose(){}privatestaticvoidContextBeginRequest(objectsender,EventArgse){varcontext=(HttpApplication)sender;//这是有问题的文件stringrequestPhysicalPath=context.Request.PhysicalPath;如果(File.Exists(requestPhysicalPath)){返回;}//文件不存在。在这里做一些有趣的事情......}#endregion}}......................................................................................................................如果您不这样做想要创建一个HttpModule,我可以想到两个hack:在IIS上使用mod-rewrite或在IIS上重写II7以允许存在的特定URL传递,获取任何其他内容并将其重定向到静态文件这可能是一个巨大的列表,如果您只有少量文件,我只建议实施此hack。更改您的URL结构以支持路由脚本,该脚本可以检查文件是否存在并在适当时返回它。该方法可能会影响缓存,请谨慎使用。以上是Jacob的C#学习教程:HttpHandler分享的所有内容只有在文件不存在时才会触发。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
