Как добавить текст на всех страницах приложения

1

Этот вопрос задает кто-то в интервью. У меня есть одно приложение, которое содержит 50000 веб-форм Asp.net, 10000 html-страниц и 20000 страниц ASP. Я хочу добавить что-то на всех страницах после тега тела, как я могу добиться этого

  • 1
    написать программу на C #, которая принимает все веб-файлы (авторизованные) в каталоге. используйте регулярное выражение, чтобы найти требуемую позицию документа и добавить теги в него
  • 1
    Полезно ли, когда что-то находится не в заголовке / теле, а сразу после него? Хорошо, если это так, тогда читайте файлы через C # или VB.NET и используйте библиотеки XML, чтобы найти соответствующие позиции и добавить в них текст.
Показать ещё 1 комментарий
Теги:

2 ответа

2

Вы можете сделать трюк с помощью пользовательского HttpModule

Модуль С#

using System;
using System.Web;
public class HelloWorldModule : IHttpModule
{
    public HelloWorldModule()
    {
    }

    public String ModuleName
    {
        get { return "HelloWorldModule"; }
    }

    // In the Init function, register for HttpApplication 
    // events by adding your handlers.
    public void Init(HttpApplication application)
    {
        application.BeginRequest += 
            (new EventHandler(this.Application_BeginRequest));
        application.EndRequest += 
            (new EventHandler(this.Application_EndRequest));
    }

    private void Application_BeginRequest(Object source, 
         EventArgs e)
    {
    // Create HttpApplication and HttpContext objects to access
    // request and response properties.
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        string filePath = context.Request.FilePath;
        string fileExtension = 
            VirtualPathUtility.GetExtension(filePath);
        if (fileExtension.Equals(".aspx") || fileExtension.Equals(".html") || fileExtension.Equals(".asp"))
        {
            context.Response.Write("<h1><font color=red>" +
                "HelloWorldModule: Beginning of Request" +
                "</font></h1><hr>");
        }
    }

    private void Application_EndRequest(Object source, EventArgs e)
    {
        HttpApplication application = (HttpApplication)source;
        HttpContext context = application.Context;
        string filePath = context.Request.FilePath;
        string fileExtension = 
            VirtualPathUtility.GetExtension(filePath);
        if (fileExtension.Equals(".aspx")|| fileExtension.Equals(".html")|| fileExtension.Equals(".asp"))
        {
            context.Response.Write("<hr><h1><font color=red>" +
                "HelloWorldModule: End of Request</font></h1>");
        }
    }

    public void Dispose() { }
}

Web.config

<configuration>
  <system.webServer>
    <modules>
      <add name="HelloWorldModule" type="HelloWorldModule"/>
    </modules>
  </system.webServer>
</configuration>

РЕДАКТИРОВАТЬ

Как прокомментировал @Andreas, существует два трубопровода distint для прессования asp classic и aspx, поэтому HTTP-модуль не может сделать трюк с ASP-страницами, возможно, только с специальным фильтром ISAPI может работать каждый запрос, но, как правило, нет используется для записи заголовка на все веб-страницы

  • 0
    Во-первых, это не сработает для страниц Classic-ASP, так как .Net и Classic-ASP используют разные конвейеры (aspnet_isapi.dll и asp.dll). ISAPI фильтр будет решением.
0

Вы можете попробовать Ctrl+H

и восстановить Ctrl+Z

  • 1
    да, это может сработать, но я бы не стал так отвечать в техническом интервью
  • 0
    Да, но я хотел посоветовать это, потому что владелец вопроса использует Classic-Asp. Таким образом, этот метод может достичь этого. Я также использую этот вид операций замены, в моем собственном использовании ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню