Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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, как описано здесь: Использовать маршрутизацию с веб-формами