Я немного разбираюсь в этом, но не нашел ответа - есть ли способ программно добавить HttpHandler на сайт ASP.NET без добавления в web.config?
Любой способ добавить HttpHandler программно в .NET?
Ответ 1
Добавив HttpHandler, я предполагаю, что вы имеете в виду файлы конфигурации
<system.web>
<httpHandlers>...</httpHandler>
</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
Ответ 2
Вы можете использовать класс 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, как описано здесь: Использовать маршрутизацию с веб-формами