Любой способ добавить HttpHandler программно в .NET?

Я немного разбираюсь в этом, но не нашел ответа - есть ли способ программно добавить HttpHandler на сайт ASP.NET без добавления в web.config?

2 ответа

Добавив HttpHandler, я предполагаю, что вы имеете в виду файлы конфигурации

<system.web>
 <httphandlers>...
</httphandlers></system.web>

Существует способ управлять им автоматически, добавив IHttpHandler непосредственно во время запроса. Итак, PostMapRequestHandler в жизненном цикле приложений, вы должны сделать следующее в своем собственном IHttpModule:

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

И это автоматически установит обработчик для этого запроса. Очевидно, вы, вероятно, захотите обернуть это в некоторой логике, чтобы проверить такие вещи, как глагол, запрос URL и т.д. Но так оно и будет. Также это количество популярных URL-адресов Rewriters, таких как:

http://urlrewriter.codeplex.com

К сожалению, однако, используя предварительный обработчик конфигурации http://www.uberasp.net/getarticle.aspx?id=49


Вы можете использовать класс IRouteHandler.

  • Внедрить интерфейс IRouteHandler в новый класс и вернуть обработчик в результате его метода GetHttpHandler
  • Зарегистрируйте свой маршрут /

Реализовать 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()
 ));
}

Примечание: если вы используете Web-формы Asp.Net, убедитесь, что у вашего webapp есть конфигурация UrlRouting в файле web.config, как описано здесь: Использовать маршрутизацию с веб-формами

licensed under cc by-sa 3.0 with attribution.