我一直在研究这个但是没有得到答案 - 有没有办法以编程方式将HttpHandler添加到ASP.NET网站而不添加到web.config?
答案 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一样使用,只是用作启动点而不是处理点。请参阅此文章。
答案 1 :(得分:13)
您可以使用IRouteHandler类。
GetHttpHandler
方法返回hander 实施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