我需要提供哪些 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,因为请求永远不会到达那里。
我有以下处理程序,
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,因为请求永远不会到达那里。