Общие файлы Global.asax и Error.aspx - PullRequest
2 голосов
/ 04 марта 2010

У меня есть несколько сайтов ASP.NET в решении вместе с общим проектом на C #. Что-то следующее:

  • Website1
  • WEBSITE2
  • ...
  • Веб-сайт (п)
  • Общее

Прежде всего, я хочу использовать файл Global.asax для регистрации всех необработанных исключений. Я мог бы иметь один файл Global.aspx для каждого веб-сайта, но весь код будет одинаковым, и, кажется, бессмысленно постоянно обновлять несколько копий одного и того же файла. Есть ли способ иметь файл Global.aspx в общей библиотеке, а затем ссылаться на него с каждого веб-сайта. Я пытался выполнить команду «Добавить существующий элемент»> «Добавить как ссылку», но страница не запускается.

Во-вторых, все веб-сайты нуждаются в странице ошибок, на которую я могу записать информацию (а не просто в HTML-страницу), поэтому у меня есть страница Error.aspx, на которую я хочу перенаправить вместе с деталями ошибок. Опять же, я мог бы иметь один на сайт, но это будет та же страница. Есть ли способ сохранить это в проекте Common и связать с ним? Единственное решение для этого, о котором я могу только подумать, - это иметь веб-сайт Error, на котором есть страница Error.

1 Ответ

7 голосов
/ 04 марта 2010

Вы можете унаследовать файл Global.asax от базового класса. Так что ваш global.asax может выглядеть так:

<%@ Application Codebehind="Global.asax.cs" Inherits="MyApplication" Language="C#" %>

Тогда ваш Global.asax.cs будет выглядеть примерно так:

public class MyApplication: BaseApplication 
{
    protected void Application_Start()
    {
        // application specific code... if any
    }
}

В вашей библиотеке определите:

public class BaseApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // do your shared code here
        base.Application_Start();
    }
}

Что касается вашей "глобальной" страницы ошибок, то я бы создал страницу обработчика (.ashx) на каждом веб-сайте, а затем создал библиотечный метод для отображения информации об ошибках. Примерно так (Error.ashx)

<%@ WebHandler Language="C#" Class="errorhandler" %>

public class errorhandler: IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        MyLibrary.ErrorHandler(context);
    }
}

Примечание: пространства имен не включены в пример для ясности.

...