Как создать базовое HttpApplication для ASP.Net (без Webforms или MVC)

Хорошо, я хочу узнать больше о том, как работает ASP.Net под капотом. Я имею в виду под MVC или Webforms и другими подобными фреймворками.

В основном я хочу знать, как эти фреймворки подключены к ASP.Net, чтобы они работали с IIS. Каков был бы минимум для создания простого HttpApplication, которое работало бы с IIS и не использовало ни MVC, ни Webforms? Какой минимум должен быть в Web.config? Что бы добавили в Global.asax?


person Earlz    schedule 22.07.2010    source источник
comment
Я предлагаю вам использовать Reflector, чтобы выяснить это.   -  person John Saunders    schedule 22.07.2010
comment
@ Джон, проблема в том, что есть на что посмотреть. Я имею в виду, просто посчитайте, сколько ссылок на сборку находится в стандартном файле web.config   -  person Earlz    schedule 22.07.2010


Ответы (2)


Напишите класс, унаследованный от IHttpHandler. Определение интерфейса:

public interface IHttpHandler
{
    void ProcessRequest(HttpContext context);
    bool IsReusable { get; }
}

HttpContext - это все, что вам нужно для выполнения приложения. Он действует как фасад для всего, что участвует во взаимодействии. Свойство Server дает вам информацию о сервере. Свойство Request предоставляет вам информацию о HttpRequest, а свойство Response предоставляет средства для визуализации вывода для клиента.

Я предлагаю использовать Reflector в HttpContext и получить представление о том, что он содержит и как работает каждый из его компонентов.

Вот базовый пример приложения:

public class HelloWorldHandler: IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        context.Response.Write("Hello World");
        context.Response.End();
    }

    public bool IsReusable
    {
        get { return false; }
    }
}

Global.asax не должен ничего содержать. Вероятно, лучше обрабатывать глобальные события, используя класс, производный от IHttpModule.

web.config нужно обрабатывать по-разному, в зависимости от того, используете ли вы IIS 7 или что-то еще. В любом случае есть раздел HttpHandler, в котором вы должны зарегистрировать свой собственный обработчик для обработки всех запросов.

Вы можете сделать web.config очень минимальным, но количество включенных разделов конфигурации зависит от того, какие функции вы хотите. Кроме того, некоторыми вещами, которые обрабатываются с помощью web.config, можно напрямую управлять с помощью IIS. См. http://msdn.microsoft.com/en-us/library/b5ysx397(v=VS.85).aspx, чтобы узнать об этом подробнее.

Надеюсь, это поможет. Мы можем предоставить вам более точную информацию, если вы более конкретно укажете то, что ищете.

person smartcaveman    schedule 13.01.2011

На самом деле я хотел сам ответить на этот вопрос, как и сделал. smartcaveman предоставляет часть решения.

Что я сделал для web.config:

<?xml version="1.0"?>
<configuration>
    <system.web>
       <compilation debug="true">
       </compilation>
    </system.web>
    <system.codedom>
        <compilers>
            <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
                <providerOption name="CompilerVersion" value="v3.5"/>
                <providerOption name="WarnAsError" value="false"/>
            </compiler>
        </compilers>
    </system.codedom>
    <!--
    The system.webServer section is required for running ASP.NET AJAX under Internet
    Information Services 7.0. It is not necessary for previous version of IIS.
    -->
    <system.webServer>
    </system.webServer>
    <runtime>
    </runtime>
</configuration>

а затем в global.asax:

protected virtual void Application_BeginRequest (Object sender, EventArgs e)
{
    if (Request.Url.AbsolutePath == "/test") 
    {
        var h=new Test1(); //make our Test1.ashx handler
        h.ProcessRequest(Context);
    }
    else
    {
        Response.ContentType = "text/plain";
        Response.Write("Hi world!");
    }
    CompleteRequest();
}

а затем вы можете использовать обработчики ASP.Net для контента (как показано) или, конечно, можете написать свою собственную замену и написать в Response самостоятельно.

Для справки, моя рабочая структура, которую я создал с помощью настраиваемого механизма маршрутизации (и механизма просмотра), находится в здесь подрывная деятельность

person Earlz    schedule 14.01.2011