powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Поправить Global.asax
25 сообщений из 40, страница 1 из 2
Поправить Global.asax
    #39423714
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть сайт на ASP.Net WebForms.
Исходников нет, есть только то. что выложено на хостинг. Нужно поправить файл Global.asax - исправить 404 ошибку и заменить 301 редирект на 302.
Global.asax существует в виде dll. Дизассемблировал его, получил проект с помощью JetBrain Reflector'а. После чего собрал этот проект - не меняя ничего - и выложил полученную dll на хостинг. И - не заработало... Получаю код ошибки 500.

И возник вопрос, а можно ли, вообще так делать? И если так нельзя, то как можно и нужно?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423727
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abejon, заплатить за исходники.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423735
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonИ возник вопрос, а можно ли, вообще так делать? И если так нельзя, то как можно и нужно?

Не можно так делать, по крайне мере в лоб. Редиректы делаются в web.config с помощью модуля URL Rewrite , можно решить массу проблем со ссылками не залезая в код.

Если всё же надо как-то повлиять на исполнение, можно попробовать написать модуль и добавить логики.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423755
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, программист, который этим занимался до меня, утверждает, что у него нет исходников. Всё, что у него есть - то, что лежит на хостинге.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423757
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, я правильно понимаю, что просто диассемблировать dll, поправить, а потом заново собрать её нельзя в принципе?

P.S. Не всё через web.config можно сделать. Не всё работает через него. Например, 404 ошибка. Если делать через web.config, то возвращается статус 200, а это неправильно для SEO, для поисковиков.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423759
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonhVostt, я правильно понимаю, что просто диассемблировать dll, поправить, а потом заново собрать её нельзя в принципе?

В принципе можно.


AbejonНапример, 404 ошибка. Если делать через web.config, то возвращается статус 200, а это неправильно для SEO, для поисковиков.

Можно добавить модуль, который обработает ответ и если надо, вернёт 404. Это всяко будет проще.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423767
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttВ принципе можно.


А как? И почему у меня это не работает?

Написать модуль, подключить его через web.config? Но в global.asax уже есть код для обработки ошибки 404, только он не работает. Он возвращает статус 200, а не 404, как должен бы.
Модуль и global.asax не будут конфликтовать?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423849
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonА как? И почему у меня это не работает?

Разреши в вебконфиге показывать детали ошибки и посмотри в чём проблема, когда возвращается 500. Просто это сделать не получится.


AbejonНаписать модуль, подключить его через web.config? Но в global.asax уже есть код для обработки ошибки 404, только он не работает. Он возвращает статус 200, а не 404, как должен бы.
Модуль и global.asax не будут конфликтовать?

Не будут. Делай лучше модуль.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39423856
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostПросто это сделать не получится.
А непросто - это как? Хотя бы в двух словах, пожалуйста.

Хорошо, попробую модуль написать. Но какой именно модуль нужен?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39424199
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonА непросто - это как? Хотя бы в двух словах, пожалуйста.

В двух словах, надо разбираться что за ошибка, потому что ошибка 500 это ни о чём, и пытаться её решить. Если бы бы просто, ты бы сюда наверное не писал, так?


AbejonХорошо, попробую модуль написать. Но какой именно модуль нужен?

IHttpModule
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39424660
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, авторРазреши в вебконфиге показывать детали ошибки и посмотри в чём проблема, когда возвращается 500
Развернул IIS 7 в локальной сети. Скопировал всё, что взял с хостинга. Добавил в Web.Config
Код: xml
1.
2.
3.
4.
5.
6.
    <system.web>
        <customErrors mode="Off" />
    </system.web>
    <system.webServer>
        <httpErrors errorMode="Detailed" />
    </system.webServer>


Теперь получаю сообщение:
Невозможно отобразить эту страницу ввиду того, что произошла внутренняя ошибка сервера. и ничего больше.

Причём, это сообщение теперь выдаётся и вместо страницы 404 даже если возвращаю старую конфигурацию.
В настройках IIS в разделе "Страницы ошибок" выбран режим "Вставить содержимое стат.файла в ошибочный ответ".
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39426392
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,
- развернул сайт в локальной сети,
- написал HttpModule для обработки ошибок,
- прописал в Web.config использование модуля,
- собрал dll, закинул её в папку bin сайта.

Сайт вообще перестал грузиться, выдаёт ошибку 500 без каких-либо пояснений. :(
Что ещё можно сделать?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39426440
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abejon,

Видимо внутрях ошибки 500 перехватываются и обрабатываются отдельно, без возможности как-то изменить это поведение через конфиг. Руки бы ободрать таким кодерам. Ну вообще да, попробуй дизассемблированные исходники не просто собрать в DLL и закинуть в проект, а запустить через студию в режиме отладки. Пока ты не поймёшь в чём конкретно ошибка и в чём проблема, помочь тебе никак нельзя.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39426446
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,я тебя правильно понял, что нужно дизассемблировать ВСЕ библиотеки, и создать из них проект заново?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39426484
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonhVostt,я тебя правильно понял, что нужно дизассемблировать ВСЕ библиотеки, и создать из них проект заново?

Ну смотри, у тебя вместо работы приложения ошибка 500, детали ошибки ты получить не можешь. Ни причин, ни источника ошибки, ни даже самой ошибки. Настройка вывода ошибок не конфигурируется, лога как я понял тоже нет. Какие у тебя остаются варианты? Всё дизассемблировать в проект и запустить в студии, чтобы поймать место ошибки. Или подключить профайлер. В общем конкретно что тебе надо сделать, чтобы решить проблему, я не могу сказать. Могу предложить варианты.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39426498
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,вариантов, я так понимаю, всего два: восстановление всего проекта и профайлер?
Причём, после профайлера не факт, что всё равно не придётся воссоздавать весь проект?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39426630
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonhVostt,вариантов, я так понимаю, всего два: восстановление всего проекта и профайлер?
Причём, после профайлера не факт, что всё равно не придётся воссоздавать весь проект?

Не факт. Проще было бы уговорить программиста отдать исходники.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427025
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, авторПроще было бы уговорить программиста отдать исходники.
Я в этом случае третья сторона. Со слов Заказчика, мой предтеча утверждает, что всё, что у него есть - выложено на сервер. Какая там предыстория - я не в курсе.

Написал свой модуль обработки ошибок, попробовал его подключить, и вот что получил:


Configuration Error

Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.

Parser Error Message: Could not load file or assembly 'HttpModules' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded. (E:\Rooms䌗34\site.ru\www\web.config line 110)


Source Error:

An application error occurred on the server. The current custom error settings for this application prevent the details of the application error from being viewed remotely (for security reasons). It could, however, be viewed by browsers running on the local server machine.

Source File: E:\Rooms䌗34\site.ru\www\web.config Line: 110

Version Information: Microsoft .NET Framework Version:2.0.50727.6421; ASP.NET Version:2.0.50727.6427

Т.е. получается, что свою сборку просто так не добавишь?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427038
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abejon,

Приложение сайта собрано на .NET 2.0
Поэтому твой модуль также должен быть собран под этой версией, а ты похоже собираешь на .NET 4.

Зайди в настройки проекта своего модуля и уменьши версию платформы до 2.0
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427239
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, да, действительно, ошибка была в разных версиях .Net Исправил, пересобрал модуль, теперь он подгружается без ошибки.

В итоге имею следующее:

Написал вот такой модуль:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
using System;
using System.Web;

namespace HttpModules
{
    public class ErrorModule: IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.Error += ProcessError;
        }

        private void ProcessError(object sender, EventArgs e)
        {
            Exception ex = HttpContext.Current.Server.GetLastError();
            HttpContext context = HttpContext.Current;
            if (ex is HttpException)
            {
                switch ((ex as HttpException).GetHttpCode())
                {
                    case 404:
                        {
                            context.Response.StatusCode = 404;
                            context.Response.StatusDescription = "Not Found";
                            context.Response.Charset = "windows-1251";
                            context.Server.Execute("~/FileNotFound.html");

                            context.Server.ClearError();

                            break;
                        }
                }

            }
        }

        public void Dispose()
        {
            throw new NotImplementedException();
        }
    }
}


Вот так зарегистрировал его в Web.Config:
Код: xml
1.
2.
3.
4.
5.
6.
<system.web>
...
    <httpModules>
	<add name="ErrorModule" type="HttpModules.ErrorModule, HttpModules" />
    </httpModules>
</system.web>



старый обработчик ошибок зарегистрирован так:

Код: xml
1.
2.
3.
4.
5.
6.
7.
<system.webServer>
...
    <httpErrors errorMode="Custom" existingResponse="Replace">
      <clear />
      <error statusCode="404" prefixLanguageFilePath="" path="/FileNotFound.html" responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>



И - не работает. Модуль, похоже, просто не вызывается при ошибке. Если старый обработчик закомментировать, то при ошибке выдаётся стандартное окно об ошибке сервера, если его не закомментируешь, то работает только он. Что-то не так в конфиге?

P.S. Пробовал варьировать значение customErrors - ничего не меняется.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427240
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, кстати, вот так выглядит фрагмент дизассемблированной dll файла Global.asax

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
using System.Diagnostics;
using System.Runtime.CompilerServices;
using System.Web;
using System.Web.Profile;

namespace ASP
{
  [CompilerGlobalScope]
  public class global_asax : HttpApplication
  {
    private static bool __initialized;

    public int ProductId
    {
      get
      {
        int num = 0;
        if (this.Request.QueryString["id"] != null)
        {
          try
          {
            num = Convert.ToInt32(this.Request.QueryString["id"]);
          }
          catch
          {
            num = 0;
          }
        }
        return num;
      }
    }

    protected DefaultProfile Profile
    {
      get
      {
        return (DefaultProfile) this.Context.Profile;
      }
    }

    [DebuggerNonUserCode]
    public global_asax()
    {
      if (global_asax.__initialized)
        return;
      global_asax.__initialized = true;
    }

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
      try
      {
        if (this.ProductId <= 0)
          return;
        this.Response.AddHeader("Location", SiteUrls.ProductServiceName(this.ProductId));
        this.Response.Status = "301 Moved Permanently";
      }
      catch (ProductIdNotFoundException ex)
      {
        this.Response.TrySkipIisCustomErrors = true;
        this.Response.Status = "404 Not Found";
        this.Response.StatusCode = 404;
        this.Server.Transfer("~/FileNotFound.html");
      }
    }

    private void Application_Start(object sender, EventArgs e)
    {
    }

    private void Application_End(object sender, EventArgs e)
    {
    }

    private void Application_Error(object sender, EventArgs e)
    {
        HttpContext oHttpContext;
        Exception oException;

        oHttpContext = HttpContext.Current;

        oException = oHttpContext.Server.GetLastError();

        if (oException is HttpException)
        {
            switch ((oException as HttpException).GetHttpCode())
            {
                case 404:

                    oHttpContext.Response.StatusCode = 404;
                    oHttpContext.Response.StatusDescription = "Not Found";
                    oHttpContext.Response.Charset = "windows-1251";
                    oHttpContext.Server.Execute("~/FileNotFound.html");

                    oHttpContext.Server.ClearError();

                    break;
            }
        }
    }

    private void Session_Start(object sender, EventArgs e)
    {
      this.Session["ShoppingCart"] = (object) new ShoppingCart();
    }

    private void Session_End(object sender, EventArgs e)
    {
    }
  }
}



Вроде бы, тоже всё верно. Нет?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427241
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Abejon,

Посмотри на события приложения:

https://msdn.microsoft.com/ru-ru/library/system.web.httpapplication_events(v=vs.110).aspx

Видимо исключение перехватывается и обрабатывается в обработчике приложения, поэтому до твоего Error не доходит.

Ты можешь повесить обработчик на EndRequest, и проанализировать ответ. Если он тебя не устраивает, переписать на другой.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427242
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AbejonВроде бы, тоже всё верно. Нет?

Видно, что ошибка перехватывается, так что бесполезно ловить её в модуле.
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427246
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt,так всё, вроде бы, правильно в Global.asax, вроде бы, должен код 404 возвращаться. Нет?
...
Рейтинг: 0 / 0
Поправить Global.asax
    #39427247
Abejon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttВидимо исключение перехватывается и обрабатывается в обработчике приложения, поэтому до твоего Error не доходит.
Похоже на то. Я так и предполагал, что будет конфликт подобного рода .А отключить его нет никакой возможности?
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Поправить Global.asax
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]