有什么方法可以在.NET中以编程方式添加HttpHandler吗?

时间:2009-12-11 13:17:21

标签: asp.net httphandler

我一直在研究这个但是没有得到答案 - 有没有办法以编程方式将HttpHandler添加到ASP.NET网站而不添加到web.config?

2 个答案:

答案 0 :(得分:18)

通过添加HttpHandler我假设您的意思是配置文件

<system.web>
    <httpHandlers>...</httpHandler>
</system.web>

通过在请求期间直接添加IHttpHandler,可以自动控制它。因此,在PostMapRequestHandler in the Application Lifecycle上,您可以使用自己的自定义IHttpModule执行以下操作:

private void context_PostMapRequestHandler(object sender, EventArgs e)
{
    HttpContext context = ((HttpApplication)sender).Context;
    IHttpHandler myHandler = new MyHandler();
    context.Handler = myHandler;
}

这将自动为该请求设置处理程序。显然,您可能希望将其包含在一些逻辑中以检查诸如动词,请求URL等内容。但这就是如何完成的。这也是有多少流行的URL重写器工作,如:

http://urlrewriter.codeplex.com

不幸的是,虽然使用pre built configuration handler that the web.confi g确实隐藏了,但似乎无法访问。它基于一个名为IHttpHandlerFactory的接口。

更新 IHttpHandlerFactory可以像任何其他IHttpHandler一样使用,只是用作启动点而不是处理点。请参阅此文章。

http://www.uberasp.net/getarticle.aspx?id=49

答案 1 :(得分:13)

您可以使用IRouteHandler类。

  1. 在新类中实现IRouteHandler接口,并根据其GetHttpHandler方法返回hander
  2. 注册您的路线/
  3. 实施IRouteHandler

    public class myHandler : IHttpHandler, IRouteHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }
    
        public void ProcessRequest(HttpContext context)
        {
            // your processing here
        }
    
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            return this;
        }
    }
    

    注册路线:

    //from global.asax.cs
    protected void Application_Start(object sender, EventArgs e)
    {
        RouteTable.Routes.Add(new Route
        (
            "myHander.axd",
            new myHandler()
        ));
    }
    

    注意:如果使用Asp.Net Webforms,请确保您的webapp在web.config中具有UrlRouting配置,如下所述:Use Routing with Web Forms