我需要提供哪些 Web 配置设置才能为 MVC 应用程序中的所有请求调用此自定义处理程序?

what web config settings I need to provide to call this custom handler for all request in MVC app?

我有以下处理程序,

public class ShutdownHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        context.Response.Write("Currently we are down for mantainance");
    }
    public bool IsReusable
    {
        get { return false; }
    }
}

在 Asp.net MVC 应用程序的每个请求上调用此处理程序需要什么 Web 配置设置?

我用一些代码尝试了这个,但无法在每个请求上调用,

routes.Add(new Route("home/about", new ShutDownRouteHandler()));

public class ShutDownRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new ShutdownHandler();
    }
}

您首先需要一个模块来映射您的处理程序:

public class ShutDownModule : IHttpModule
{
    public void Init(HttpApplication app)
    {
        app.PostResolveRequestCache += (src, args) => app.Context.RemapHandler(new ShutDownHandler());
    }

    public void Dispose() { }
}

然后在你的 web.config:

<system.webServer>
    <modules>
      <add name="ShutDownModule" type="YourNameSpace.ShutDownModule" />
    </modules>
</system.webServer>

MVC 是一个端点处理程序,就像 WebForms 一样。你是说,"hey don't call MVC handler, call this instead"。

为此,您需要拦截本应发生并调用 MVC 的映射,而是调用您自己的处理程序。为了拦截管道中的事件,我们使用 HttpModules 并如上所述注册它们。

所以您实际上是在关闭 MVC,因为请求永远不会到达那里。