Handler in system.webServer in web.如果文件存在于指定的路径中,则忽略配置



我有一个处理程序,我想处理所有流量,包括文件等。

但是,一旦URL与物理文件的位置匹配,例如"someFile/test.cshtml",它就会忽略我的处理程序和BeginProcessRequest,在这种情况下,甚至以某种方式使用RazorEngine渲染cshtml?

但是,如何防止此行为并确保所有请求都由我的处理程序处理?

这是我的整个网络。配置

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <httpHandlers>
      <clear />
      <add verb="*" type="SimpleWebServer.HttpHandler" path="*"/>
    </httpHandlers>
  </system.web>
  <system.webServer>
    <handlers>
      <clear />
      <add name="CatchAll" verb="*" type="SimpleWebServer.HttpHandler" path="*" resourceType="Unspecified" allowPathInfo="true"  />
    </handlers>
    <modules runAllManagedModulesForAllRequests="true"/>
    <validation validateIntegratedModeConfiguration="false"/>
  </system.webServer>
</configuration>

还有我的 http 处理程序:

namespace SimpleWebServer
{
    public class HttpHandler : IHttpAsyncHandler
    {
        ...
        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback callback, Object extraData)
        {
            return AsyncResult.GetAsyncResult(context, callback);
        }
        ...
    }
}

使用 HttpModule 而不是 HttpHandler。模块在管道的早期执行。因此,无需与主机 IIS 中的现有处理程序竞争。

HttpModule

namespace SimpleWebServer
{
    public class CustomHttpModule : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.BeginRequest += 
                this.BeginRequest;
            context.EndRequest += 
                this.EndRequest;
        }
        private void BeginRequest(Object source, 
            EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            // do something 
        }
        private void EndRequest(Object source, EventArgs e)
        {
            HttpApplication application = (HttpApplication)source;
            HttpContext context = application.Context;
            // do something 
        }
        public void Dispose()
        {
        }
    }
}

网络配置

<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <add name="CatchAll" type="SimpleWebServer.CustomHttpModule"/>
    </modules>
  </system.webServer>
</configuration>

相关内容

最新更新